开源短信转发器全解析:原理、配置与避坑指南
发布时间:2026/9/8 8:47:04 作者:尧图编辑部 阅读量:1,286

先聊句实在的如果你手里只有一台手机平时也不怎么收验证码那标题里的“短信转发器”可能跟你没太大关系。但只要你像我一样主力机换得勤、旧手机还没处理或者工作需要插着流量卡、物联网卡那你就一定会遇到一个尴尬场景——人不在设备旁边关键短信却只能躺在另一台手机里吃灰。我最后的解法就是自己在GitHub上找了个开源项目把短信转发器整个流程跑通了。今天这篇文章就把我从选型、编译、配置到排坑的完整过程写出来希望能帮你少走点弯路。这不是什么“一键脚本装完就完事”的内容也不是让你把短信发到某个商业云平台上去。恰恰相反我选择开源方案的核心原因就三个代码可审、数据可控、功能可改。我会把这套短信转发器项目涉及的核心原理、权限配置、规则玩法以及各种厂商系统里的“隐形坑”一次讲透。无论你是只想装个App用现成功能还是想改改代码做成自己的私有服务这篇文章应该都能覆盖到。1. 为什么我最后选择了开源短信转发器方案1.1 并不是所有短信都需要转发但你总有那么几条需要先说发生在自己身上的真实场景。我平时的主力工作机是一个安卓手机另一个旧手机专门放在家里插宽带绑定的那张SIM卡用来收快递、物业通知和银行验证码。问题是只要我出门这张卡上的短信我就完全看不到。遇到需要验证码登录的时候要么跑回家要么让家里人念给你听非常狼狈。后来我意识到这事儿不是个例——很多做电商、做客服、做运营的朋友手里都是一机一号还有人拿着五六张卡专门做账号注册和业务对接这些实际需求都很强烈。除了验证码还有一类需求是“短信归档”。有些重要通知比如宽带欠费、社保扣款、水电费账单收到之后不及时处理很容易忘。短信转发器可以把这些消息统一汇总到一个固定的入口里比如邮箱或者企业微信的应用机器人相当于给短信做了一份自动备份。再有就是刚提到的物联网卡、流量卡。这类卡片很多没有实体短信界面或者你根本不方便去插卡的设备上查看。通过转发器配合一个简单的过滤规则只把“额度用完”“续费成功”“实名认证提醒”这类消息透传出来效率会高非常多。所以我可以负责任地说短信转发这件事不是伪需求只是之前一直没有一套足够顺手的开源工具能把它做得干净。1.2 商业工具和自制方案差在哪里去应用商店搜“短信转发”能搜出一堆App。这些App我基本都试过功能层面有的做得确实很全但用下来总有那么几个让我不太舒服的地方。第一是隐私边界。短信内容包含验证码、银行卡交易提醒、个人身份信息这些东西如果走的是某个商业App的云端服务器等于你的全部隐私要经过第三方。你要么选择信任它的隐私政策要么就自己承担风险。对于严谨一点的人来说这一步就很难迈过去。第二是功能限制。很多商业App的免费版只在特定条件下转发比如限制转发条数、限制通道数量还经常要开VIP。你可能还要忍受启动页广告、通知栏广告。如果某天开发者停止维护了或者商店下架了你辛辛苦苦配置的规则全部归零。第三是定制能力。开源项目就不一样我拉下来源码看一下至少能知道它在哪些权限上做了事情、数据发到了哪里。想改规则引擎就改规则引擎想加一个Webhook通道就自己加甚至可以改成一个完全内网使用的转发服务。决定权在自己手里不用等别人发版。当然开源也不等于零门槛。它要求你有一定的Android编译基础、愿意看文档、还得有基本的排错能力。但这点学习成本换来的数据可控性和功能自由度还是很值的。1.3 这项目是怎么运转起来的先给个整体蓝图在用开源短信转发器之前我建议你先建立一张整体架构图。虽然不会画具体图但思路大家可以记一下整个系统其实就由三个角色组成。第一个是“事件源”也就是 Android 系统里的短信或通知。短信事件有两种获取方式一种是直接利用系统短信广播拿到新收到的短信内容另一种是监听通知栏从短信App弹出的通知里提取内容。前者更底层后者兼容性更好不同的开源项目实现方式略有差异。第二个是“处理中枢”也就是转发器App本身。它负责把事件源收到的内容做规则匹配比如判断发件人、匹配关键词、检查当前是否在免打扰时间段然后按照预设模板重新组装一条消息。第三个是“投递通道”也就是消息最终发去的地方。可以是一个邮箱SMTP服务、一个企业微信机器人Webhook、一个HTTP接口也可以是一个MQTT服务端。搞清楚这三个角色后再去看任何短信转发器项目都会感觉特别清晰它无非是把你手机短信收到的事件通过一套规则系统翻译成HTTP请求或邮件发出去。接下来我按这个结构把核心设计拆开讲。2. 短信转发器的原理与核心设计拆解2.1 一条短信从收到到转发中间发生了什么以我用的这套开源项目为例它内部同时集成了两种短信获取方式一个叫“短信广播接收”一个叫“通知监听服务”。先讲短信广播接收。从 Android 4.4 开始系统对短信权限做了收紧第三方应用不能再随意读取所有短信除非你把它设置为“默认短信应用”。所以很多短信转发器不再走这条路而是退而求其次使用“通知监听”。这个机制的本质是让App通过系统API读取状态栏里的消息通知然后把通知正文里的短信内容解析出来。理论上通知监听是兼容性更好的方案。不管是 MIUI、ColorOS 还是原生 Android只要你能把“通知使用权”授权给转发器App它就能在不root的情况下拿到短信和各类App的通知内容。也正因为如此这类项目一般不只转发短信还能转发微信、QQ、钉钉的消息通知。你可以设置规则只转短信也可以把某个App的通知一起转出去非常灵活。拿到短信内容后处理中枢会先做去重。因为一条短信可能会同时触发广播和通知监听两条链路如果两条链路都上报一次就会重复转发。好的开源项目会维护一个消息ID池把事件源、收到时间、手机卡槽等信息拼成一个唯一标识短时间内出现过就不再处理。接下来就是规则匹配。转发器会把短信的发件人号码、短信内容、接收卡槽、收到时间拿去做条件判断。这里有个细节双卡双待的手机最好能区分卡槽。因为不同卡槽收到验证码的用途可能完全不同一张是工作卡一张是生活卡工作卡的验证码需要转到企业微信生活卡的可能只需要发邮件归档。项目里对这个场景的支持程度也是我当初重点考察的一个点。最后一步是消息组装。常见的模板占位符包括发件人、内容、时间、设备名称、卡槽名称等。举个例子我的转发模板会写成这样设备{deviceName}卡槽{simSlot}发件人{sender}时间{time}内容{content}这样不管是看邮箱还是看群消息我都能一眼判断出短信来自哪台设备、哪张卡上下文非常清楚。2.2 转发通道怎么选邮件、Webhook、群机器人转发通道决定了你的短信最终出现在哪里这是整个项目里最需要根据自身情况做取舍的部分。我整理了五种常见通道列个表直接对比。通道类型适用场景优点需要留意的点SMTP邮箱个人归档、长期留存稳定、无额外依赖、可全文检索需要开启邮箱SMTP服务部分邮箱需要专用密码企业微信机器人群消息、团队协作实时性好、支持Markdown格式、手机电脑都能看需要企业微信群Webhook地址不要泄露钉钉机器人团队协作同上国内网络环境友好需要自定义关键词或加签才能发送消息自定义HTTP API自建服务、深度开发完全可控可以对接任意后端需要自己有服务器或内网穿透手段MQTT物联网、极客玩法轻量、可订阅消费需要自建Broker配置门槛相对较高我自己用得最多的是两个SMTP邮箱加企业微信机器人。SMTP负责兜底短信正文会完整发到邮箱里方便以后翻企业微信机器人负责实时提醒验证码一到手机就立刻弹出来不用一直盯邮件。有些项目还支持 Bark这是 iOS 上一个很流行的推送工具。假设你主力机是 iPhone旧安卓机负责收短信就能通过 Bark 把消息直接推到 iOS 的通知栏里体验很像系统原生推送。这一套方案在很多“安卓收码、iPhone主力”的人中间非常流行成本也低。选通道的时候我建议你遵循一个原则优先选择自己不缺的那类基础设施。比如你已经在用企业微信那就直接上企业微信机器人如果你有 Nas 或其他公网服务器那自定义 HTTP API 就是最自由的方案可以把消息加工后写进数据库甚至和家里的自动化系统联动。不要一上来就搞大而全稳定到达比通道数量重要得多。2.3 过滤规则和模板比想象中更重要安装好转发器很多人第一件事就是把所有短信全部转发出去。我劝你不要这么做原因很简单垃圾短信和通知类短信的量太大真正有价值的信息会被淹没。我花了挺长时间才把过滤规则调到一个比较舒服的状态这里分享几个核心思路。第一关键词白名单过滤。比如我只需要转“验证码”“银行”“缴费”“余额”等关键词相关短信就在规则里用“包含”匹配。实现方式可以是普通的子串匹配也可以直接写成正则表达式。正则表达式的好处是能组合多个条件比如同时匹配“验证码”和“登录”一条规则就能覆盖多种场景。第二发件人黑名单。有些号码段会固定发营销短信比如一些 106 开头的服务号骚扰占比高。如果已经确认为纯营销号码可以在黑名单里直接屏蔽不用等关键词排除。第三按时间段限定。比如夜间 23:00 到早上 7:00我设置了“不转发非紧急短信”的规则。很多转发器支持在规则里配置生效时间区间你可以精确到每周哪几天、哪几个小时对工作号和生活号做进一步隔离。第四规则优先级。多规则同时命中时项目会按顺序执行。比如我先配一条“所有短信都转发到邮箱”的全量规则再配一条“包含‘验证码’的短信同时转发到企业微信”的精准规则那在项目里就要把精准规则放在前面或者设置“命中后停止继续匹配”。否则一条验证码短信会触发两条规则我就得收到重复通知。模板方面也有两个容易踩的坑。一个是不要直接在模板里塞太多换行符企业微信机器人对消息内容有长度限制过长的消息会被截断另一个是要注意敏感信息打码。我一般会对验证码类短信做“内容原样转发”但银行交易短信我会写模板的时候用正则提取金额和卡号后四位避免完整银行卡号泄露到第三方群里。3. 从拉代码到跑通全流程的实操记录3.1 环境准备与编译要点我用的这个开源项目官方维护了比较完整的发布包如果你不想折腾源码直接去Release页面下载对应APK就能用。但我建议还是把编译流程走一遍原因很简单只有自己编译过一遍你才知道它依赖哪些库、权限怎么声明、后续修改代码要从哪里下手。编译环境我列一下Android Studio我这边用的是 Hedgehog 版本。JDK 17。Android SDK 平台版本项目一般会在 build.gradle 里指定我建议直接按项目要求来。Gradle 版本跟着项目 wrapper 自动下载即可。操作步骤是这样的把仓库 clone 到本地或者在 GitHub 页面直接下载 zip 包。用 Android Studio 打开项目首次同步会自动拉依赖这一步需要网络稳定。项目同步完成后在 Build Variants 窗口选择 release 或 debug。建议先编译 debug 包因为 debug 包签名方便调试后续改代码测试也比较快。点击 Build Build APK。编译完成后在 app/build/outputs/apk/debug/ 目录下找到 APK传到手机上安装。这里有几个容易出问题的点比如网上有些项目用到了比较新的 AndroidX 库需要本地有对应版本的 SDK还有一些项目在 Gradle 配置里加了签名文件但仓库里不会附带签名文件需要你自己在 local.properties 里配置签名路径否则打 release 包会失败。我一开始就被这个签名问题卡了一次后来直接在 build.gradle 里把 release 的 signingConfig 改成了 debug 签名才顺利跑通。如果只想要功能而不做二次开发那确实不用编译。但你要是想加一个自定义的转发通道或者调整规则引擎那源码级别的熟悉就躲不掉了。这算是把开源项目用出价值的一道分水岭。3.2 权限配置和后台存活设置拿到APK并装好后头号任务是给它授权。这里我按重要程度排序逐个说明。第一步是“通知使用权”。进入系统设置 通知使用权不同ROM名称略有差异找到这个转发器项目打开权限。这一步非常关键。项目需要它来读取状态栏里的短信通知内容。如果你没开这个权限最典型的表现是App界面测试正常但来真实短信时没有转发。第二步是“电池优化白名单”。进入系统设置 电池 电池优化把项目设置为“不优化”。否则安卓系统可能在锁屏一段时间后把后台服务杀掉你会很困惑为什么白天一切正常过了一夜就收不到转发了。需要说明的是不同厂商对这个功能的叫法不同有的叫“省电策略”有的叫“后台纯净度”意思都差不多就是让系统别乱杀这个App。第三步是“自启动管理”。在国产安卓系统里这步基本是必须的。你要在系统管家里找到“自启动”或“应用启动管理”允许它在开机后自动拉起允许后台弹出界面。有些系统还提供了“锁定最近任务”的功能把该App在多任务界面下拉锁定也能降低被杀概率。第四步如果系统版本较新建议把“前台服务”的通知保持可见。很多短信转发器会在通知栏常驻一条“服务运行中”的通知看起来有点占地方但这条通知其实也是它保活的一种手段。如果你把它划掉了服务可能被系统一并清理掉。第五步双卡手机还要确认一下“读取短信”或者“读取电话状态”的权限是否已授予。有些功能比如区分卡槽、获取SIM卡运营商信息需要电话权限。Android 6.0 以后这类权限都是运行时申请如果安装时不小心拒绝了可以在应用设置里补开。这里我特别提一句项目自带的“测试按钮”真的很好用。配置完通道和规则后不要等真实短信直接在页面里点“发送测试消息”它会立刻生成一条假短信并走一遍完整流程。这一步能快速定位是规则问题、通道问题还是权限问题强烈建议每次改配置后都点一下。3.3 我的两套常用规则配置配置部分我直接拿我自己的情况举例方便你照着改。第一套是“验证码快速通道”。目的让所有包含“验证码”“校验码”“动态码”的短信在第一时间转发到企业微信群。具体配置这样写规则名称验证码实时提醒过滤条件内容包含“验证码”或“校验码”或“动态码”生效时间段全天转发通道企业微信群机器人模板内容【验证码提醒】 设备{deviceName} 时间{time} 号码{sender} 内容{content}这里我把发件人号码也打出来了方便有些银行类验证码需要确认发送方是不是官方号码。如果你觉得转发到群里让同事看到验证码不合适那就把通道换成SMTP邮箱。第二套是“账单归档通道”。目的把宽带、水电、信用卡账单短信长期保存到邮箱不做实时通知。具体配置这样写规则名称账单归档过滤条件内容包含“账单”或“欠费”或“扣款”且号码不在黑名单生效时间段全天转发通道SMTP邮箱模板内容subject【账单归档】{sender} {time} content{content}这里有一个细节邮件标题里我会把发件人和时间带上这样在邮箱列表页不用打开详情就能判断是哪条账单。另外因为账单短信有时比较长我还会在模板里额外加一行“非实时提醒”的标注提醒自己别漏动作。第三套规则是做“夜间静默”。目的保证我在休息时不被验证码短信吵到但也不漏掉紧急联系。我会把 23:30 到 7:00 这个时间段内“发件人号码匹配手机号”的短信设置为“仅邮件不推群消息”而纯营销短信直接丢弃。这样既不打扰睡眠也不至于让重要的个人短信失联。你可以先抄我这三套规则然后再根据自己的实际场景细化。总的来说我建议规则数量控制在五条以内。规则越多匹配顺序就越容易乱排查问题起来也更麻烦。保持简单保持可预期。4. 常见故障排查与避坑清单4.1 突然不转发了先从这几处查起用转发器时间长了难免遇到“忽然收不到消息”的情况。这里把我踩过的坑做一个速查表按排查顺序排列。现象可能原因处理方式完全收不到转发通知使用权被系统自动关闭重新打开软件关掉“通知使用权”再重新授权锁屏一段时间后失效电池优化未设置把应用加入电池优化白名单重启手机后失效自启动权限没给进系统管家允许自启动收得到但会延迟几分钟通道接口响应慢或网络唤醒延迟检查网络和通道端稳定性只有某些卡槽不转发双卡策略未配置在规则里指定卡槽或检查对应SIM卡是否允许被读取规则变了但不生效规则优先级或缓存问题先停用再启用规则或清掉App缓存重新配置有一次我排查了大半天最后发现是手机系统更新后通知使用权被重置了。这种事情在国产ROM里其实不算少见所以如果某天突然失效第一个检查的永远是权限页而不是规则本身。还有一次的问题是出在“通道测试成功但真实短信不转”上。原因是短信过滤规则里我用了一条正则当时写得太严格把“验证码”三个字都匹配不出来了。你如果也写了正则建议先用项目自带的“正则测试”功能跑一遍拿几条历史短信试一下再应用到正式规则里。4.2 重复转发和漏转发的两个经典问题重复转发算是这类项目里最让人抓狂的bug之一。我遇到过这样一个情况一条验证码短信被转发了两次时间间隔只有几秒。后来排查下来发现是因为我同时开启了“短信广播”和“通知监听”两种获取方式而系统可能在一瞬间通过两条链路把同一条短信都上报给了处理中枢。开源项目的作者通常会在代码里去重但有些场景仍然会漏。比如双卡手机两个事件可能携带的SIM信息不一致导致生成的唯一ID不同最终就没能去重。解决办法是在项目设置里手动选择一种短信获取方式。我个人的经验是优先用“通知监听”。因为很多国产ROM对纯短信广播的发送并不及时反而是通知栏消息更可靠。如果你发现转发的实时性很差也可以两条链路都开着但就要接受偶尔重复转发的风险同时在接收端做去重。比如你转发到企业微信群里重复收到消息那只能说明链路没调好。漏转发的情况则多半出在过滤规则上。我看到不少人在关键词匹配时用了“完全匹配”比如只匹配“验证码”这三个字结果来了一条短信写的是“动态验证码”就没有命中。所以除非你明确需要精确匹配否则尽量用“包含”而非“完全匹配”。4.3 国产系统后台限制的通用解法这几年国产安卓系统对后台进程的管控越来越激进这本来是好事但同时也给这类工具类App带来了不小的挑战。我用过的几个ROM大致解法是这样的MIUI 系统在“设置 应用设置 应用管理”里选择该应用把“省电策略”改成“无限制”再进“自启动管理”把开关打开。另外在“最近任务”界面把应用卡片下拉会出现锁定标志这也是防止被一键清理的方式。EMUI/鸿蒙系统在“设置 应用 应用启动管理”里把该应用设为“手动管理”并把“允许自启动”“允许关联启动”“允许后台活动”三个开关全部打开。如果还不行在“设置 电池 更多电池设置”里关闭“休眠时始终保持网络连接”之类的限制。ColorOS 系统在“设置 电池 应用耗电管理”里找到应用打开“允许完全后台行为”同时在“设置 应用 自启动”里允许应用自启动。另外在“最近任务”界面锁定应用卡片也有效果。原生Android则相对简单把应用在“电池优化”里设为“不优化”基本就能稳定运行。只是需要注意不同年份的原生Android对前台服务类型的限制不同部分版本要求应用必须具有特定权限才能从后台启动服务。如果遇到启动失败的情况不妨手动点击App图标打开一次界面让服务在前台跑起来再锁屏测试。这个背景问题没有一劳永逸的答案。厂商每更新一个大版本后台策略就可能调整一次。我的建议是装好转发器后不要急着收工先在锁屏状态下发一条测试短信确认整条链路稳定了再真正投入使用。最后再分享一个小技巧我在部署完短信转发器之后会额外建一个独立的邮箱账号专门用来接收转发内容而不是用主力邮箱。一是方便做过滤和归档二是万一转发通道被爆破或者Webhook地址泄露影响范围能控制在单独的子账号里。开源项目用起来很爽但数据安全这件事始终得自己心里有数。