最近翻了台吃灰两年的安卓旧手机出来,随手插了张备用SIM卡,装了个SmsForwarder短信转发器,当天就把这台闲置设备变成了一台7x24小时在线运行的短信网关。主力机收不到的银行验证码、快递取件通知,全部自动推送到微信群里,不需要我再隔三差五去翻旧手机。
如果你也有类似需求——主力机不想插第二张卡、工作机长期放工位充电、或者干脆想用一台废弃手机专门接收各类验证码短信做通知中转——那这篇文章应该能帮到你。我会从下载渠道、安装权限、发送渠道配置、转发规则设置,到华为/荣耀手机常见的“收不到短信、延迟转发”问题,一条龙讲清楚,全部基于我实际配置和踩坑后的经验。
1. SmsForwarder到底解决什么问题:一台旧手机就是你的短信网关
1.1 为什么你需要一个短信转发器
现在的手机卡套餐里,短信几乎是免费的,但接收短信的需求却一点没少。验证码、银行流水通知、快递取件码、App登录确认、甚至物业通知,全都在往短信里塞。问题在于:很多人主力机不愿意插工作卡,或者双卡手机副卡收到的短信不会主动弹窗,还有那些专门用来注册测试账号的手机号,短信堆在抽屉里的旧手机里根本没人看。
SmsForwarder干的活,就是把这些短信自动转发出去。转发的目的地不是另一个手机号,而是微信、钉钉、邮箱、HTTP接口这些真正方便看、方便处理的地方。本质上,一台旧安卓手机只要插着SIM卡、连着Wi-Fi、装上SmsForwarder,就变成一个低成本、可定制、不依赖任何运营商增值业务的短信通知网关。
1.2 SmsForwarder的核心工作流程
SmsForwarder的机制一句话能说清:Android系统在收到新短信时,会向所有注册了短信权限的App发送一条系统广播,SmsForwarder正是监听这条广播来获取短信内容,然后再根据你配置的规则,决定要不要转发、转发到哪个渠道。
这里有个很关键的点:它不需要成为系统的默认短信应用。很多人第一次用会以为要去“设置-默认短信应用”里把它选上,其实不需要。默认短信应用是负责写短信数据库、做短信界面展示的,而SmsForwarder只监听系统广播,走的是“收短信事件”这条路,不会动你的短信数据库。所以安装完直接给权限就行,不用改默认短信应用设置。
不过这也衍生出一个常见坑:Android 8.0之后,系统对后台应用限制越来越严格,如果手机厂商的省电策略把SmsForwarder的后台进程杀了,那系统即便发出了短信广播,也没有进程接收。这就是后面要重点讲的华为手机“不转发短信”问题的根源。
1.3 版本定位:为什么选择v3.3.3
SmsForwarder是GitHub上的开源项目,开发者是pppscn,更新频率一直挺稳。v3.3.3属于3.x系列的稳定版本,相比2.x版本,3.x的配置界面重做后逻辑清晰非常多,尤其是“发送渠道”和“转发规则”分离设计之后,多通道、多规则的管理大大简化。
如果你之前用过2.x版本,会发现3.x的规则编辑更人性化,转发时还能带设备名称、SIM卡槽、时间戳这些变量,通知内容一眼就能看出是哪台设备发的。所以别用老版本了,直接上v3.3.3。
2. 下载安装与权限:这步没做对,后面全白搭
2.1 下载渠道与版本选择
SmsForwarder的官方下载渠道主要是GitHub Releases页面,作者会发布打好的APK包,v3.3.3直接在里面能找到,文件名类似SmsForwarder_v3.3.3.apk,下载后安装即可。
国内用户在应用商店搜索“短信转发器”也能搜到同名应用,但要注意核对版本号和开发者信息,认准pppscn这个作者。从应用商店装的好处是后续更新方便,但从GitHub装的新版本通常更及时。
安装时有两点提醒:
- 旧版本升级到3.x后,如果发现配置不见了,先去设置里看有没有“数据迁移”入口,或者从老版本导出配置文件再导入。
- 手机提示“未知来源应用”时,允许本次安装即可,这是Android正常的安全提示,不影响使用。
2.2 安装后的权限清单
打开App后,它会引导你开启一堆权限。这一步别嫌烦,每一项都有实际用途。我给一份对照说明:
| 权限 | 用途 | 是否必须 |
|---|---|---|
| 读取短信 | 获取短信内容用于匹配规则 | 必须 |
| 接收短信 | 接收新短信广播 | 必须 |
| 发送短信 | 部分场景下自动回复或转发到手机号 | 可选 |
| 拨打电话/读取通话状态 | 来电转接功能需要 | 可选 |
| 通知权限 | 显示前台服务常驻通知 | 必须 |
| 忽略电池优化 | 防止系统杀后台 | 强烈建议 |
| 自启动 | 开机后自动拉起服务 | 强烈建议 |
Android 13及以上,短信权限属于运行时权限,App会弹窗让你授权,记得点“允许”。如果你的手机有“电池优化”设置,搜索SmsForwarder,把它设为“不限制”,否则低电量模式下系统会优先杀掉它。
2.3 系统电池优化与常驻通知
SmsForwarder运行时会创建一个前台服务,通知栏能看到一条类似“SmsForwarder正在运行”的常驻通知。这个通知不是烦人的广告,是Android前台服务的标志,也是它“活着”的证据。
这里有个实操经验:不要手动划掉这条通知,也不要长按通知点击“停止”。如果误操作了,重新打开App,服务会自动拉起。还有部分手机系统在“通知管理”里把App的“允许通知”关掉后,前台服务也会被系统判定异常而被杀,所以通知权限保持默认开启即可。
3. 发送渠道配置:把短信推到微信、钉钉、邮箱的完整步骤
3.1 渠道类型怎么选
SmsForwarder发送渠道支持的类型非常多:企业微信、钉钉、飞书、Server酱、Telegram Bot、Bark、邮箱SMTP、Webhook、MQTT等。但我实际用过一圈后的结论是:大多数人只需要一个群机器人渠道加一个邮箱渠道就够了。
群机器人渠道的优先推荐顺序是:企业微信或钉钉。理由是免费、稳定、手机和电脑都能实时收,而且有官方的Webhook协议,转发几乎无延迟。相比之下,个人微信的转发方案依赖第三方库和扫码登录,容易被风控,不建议作为主力方案。
3.2 企业微信群机器人配置(推荐首选)
企业微信群机器人是我目前用的主力渠道,配置一次之后几乎不用管,稳定性很好。
步骤:
- 打开企业微信App,创建一个群(可以只拉你自己一个人)。
- 群设置 → 群机器人 → 添加机器人 → 新创建一个机器人,给它起个名字,比如“短信网关”。
- 添加完成后,会得到一个Webhook地址,形如
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx,复制保存。 - 打开SmsForwarder → 发送渠道 → 右下角添加 → 选“企业微信应用” → 类型选“群机器人模式” → 把Webhook地址粘贴进去,备注写“短信网关”。
- 点击“发送测试消息”,企业微信群里应该立刻出现一条测试通知。
重点提醒:企业微信群机器人目前限制是每分钟最多20条消息。日常短信量完全够用,但如果你的短信是那种每秒钟刷好几条的行情通知,建议走邮件渠道,别把群机器人刷爆了。
另外,这个Webhook地址等同于群内发言权限,别发到公开渠道,否则任何人都能在你的群里发消息。
3.3 钉钉群机器人配置
钉钉的配置思路和企业微信几乎一样,区别在安全设置。
- 钉钉群 → 右上角设置 → 智能群助手 → 添加机器人 → 自定义。
- 安全设置里有两个常用选项:自定义关键词和加签。
- 自定义关键词:要求发送的消息必须包含指定关键词,比如“短信”。SmsForwarder的钉钉渠道里有个“内容模板”,你可以在模板里固定加上“短信”两个字,这样一定命中关键词。
- 加签:会生成一个Secret密钥,把它填到SmsForwarder钉钉渠道的“加签Secret”输入框即可。
- 拿到Webhook地址,填入SmsForwarder → 发送渠道 → 钉钉 → 自定义机器人。
- 测试发送,钉钉群里出现消息即配置成功。
我的经验是:加签比关键词更灵活,不用在内容里强行塞关键词;关键词模式适合不想碰加签计算逻辑的人。SmsForwarder里加签模式已经算好了签名,直接填Secret就行,不用自己去算时间戳。
3.4 邮箱SMTP和Server酱
邮箱适合当备份通道,尤其是企业微信/钉钉机器人遇到平台限流或网络波动时,短信还能从邮箱兜底收到。我现在的方案就是企业微信群为主、QQ邮箱为辅。
邮箱SMTP的配置,以QQ邮箱为例:
- 在QQ邮箱网页端打开“设置 → 账户”,开启SMTP服务,生成一个授权码。注意这里用的是授权码,不是QQ邮箱登录密码。
- SmsForwarder添加“邮箱”渠道,SMTP服务器填
smtp.qq.com,端口填465,SSL加密开启,账号填QQ邮箱地址,密码填授权码。 - 发送测试邮件,看收件箱是否收到。
163邮箱、126邮箱的配置方式类似,只是SMTP服务器地址不同。
Server酱是另一种推荐给个人用户的通道,它本质上是把消息推送到你的微信,通过微信公众号模板消息触达。使用时去Server酱官网扫码登录,获得一个SendKey,填入SmsForwarder的“Server酱(Turbo版)”渠道即可。Server酱适合单用户用,配置最简单,但相比群机器人少了一些群内多人可见的特性。
3.5 渠道测试:先验证再进规则
无论配哪个渠道,配置完成后都要先点“发送测试消息”验证,确认渠道通了再开始配置转发规则。这一步能快速排除绝大多数问题:Webhook地址复制错了、Secret没填、SMTP授权码不对、端口不通,点一次测试立刻暴露。
实测中很多人配置完规则发现不转发,排查到最后才发现是渠道本身就没配好,白白浪费不少时间。
4. 转发规则配置:让短信按你的意愿流向正确的地方
4.1 规则五要素:名称、匹配条件、SIM卡、渠道、时间
SmsForwarder的规则页是核心中的核心。一个规则可以拆成五部分:
- 规则名称:随便写,但建议按用途命名,比如“银行验证码”“快递通知”。
- 匹配条件:短信发送者号码或短信内容的匹配逻辑。
- SIM卡选择:双卡用户按SIM卡ID过滤。
- 执行动作:选择转发到哪些渠道,可多选。
- 时间窗口:可选只在指定时间段内生效。
新增规则后,系统按顺序从上往下匹配。这里的逻辑是“每条短信会遍历所有已启用的规则,只要符合规则就执行转发”,所以如果你同时配了“转发所有短信”和“只转发银行短信”两条规则,银行短信会同时被转发两次。这不是Bug,是规则设计如此。
解决办法有两个:一是把规则设计成互斥的,先用高优先级规则捕获特定短信,再设一个“全部短信”兜底;二是在设置里开启“转发去重”,设定一个时间窗口(比如5秒),同一短信在窗口内只转发一次。
我的方案是:一条“银行验证码”规则匹配特定号码段,一条“全部短信”兜底,但兜底通道只发邮箱,正选通道发企业微信,实现“重要短信推送微信,全部短信留底邮箱”,从而不会重复刷屏。
4.2 匹配条件里的正则与关键字技巧
匹配条件支持“包含”“不等于”“正则表达式”“开头是”“结尾是”这些模式。日常使用,“包含”和“正则表达式”两种基本够用。
以银行短信为例:
- 发送者匹配设为“包含”,输入
95533|95588|95555|95566,用竖线分隔多个号码,即可匹配建行、工行、中行等多家银行的客服短信。 - 内容匹配设为“正则表达式”,输入
验证码|校验码|动态密码,这样只要短信正文里出现这些关键词,就命中规则。
如果一个App给你发短信用的号码是106开头的服务号,可以设一个规则:发送者“开头是”106,转发到备用邮箱,专门收集这类营销通知。
过滤广告短信也可以在规则里反向操作:比如设置内容“包含”退订|回复TD|广告的短信直接不转发。SmsForwarder的规则里没有直接的“排除”选项,但你可以通过“匹配后不转发”的规则绕过去,或者在兜底规则前加一条高优先级规则,执行动作留空。
4.3 多卡分流与免打扰设置
双卡手机是SmsForwarder的高频使用场景。App会识别当前手机的SIM卡信息,在规则里可以选择“SIM卡1”“SIM卡2”或“不区分”。这里的SIM卡ID是系统为每张卡生成的唯一标识,不是卡槽序号,所以换卡后需要重新确认。
例如卡1插的是工作卡,只用来收验证码;卡2插的是生活卡,收各类App通知。那就可以设两条规则:
- 规则A:SIM卡1 + 发送者包含
106→ 转发到微信“工作通知”群。 - 规则B:SIM卡2 + 内容包含
取件|快递→ 转发到邮箱。
免打扰设置适合夜班朋友:在规则里启用了时间窗口后,可以设定只在09:00-23:00转发,半夜收到的短信不推送。这个对验证码场景影响不大,但如果机器用于接收服务器异常告警短信,我建议不要设时间窗口,保持全时段转发更稳妥。
5. 华为/荣耀不转发短信?问题十有八九出在系统省电策略
5.1 现象与根因
“SmsForwarder华为手机不转发短信”是很多人搜索时踩到的关键词,我自己在华为备用机上首次配置也遇到过:装好App、配好渠道、测试通道正常,锁屏放在一边,等新短信进来,微信群里始终没反应。重新打开App,一切又正常了,过一会儿又失灵。典型症状是“App在前台就转发,退到后台就罢工”。
根子在华为EMUI / 荣耀MagicUI的“启动管理”和“省电策略”。这两套系统默认会禁止第三方应用的自启动、关联启动和后台活动。SmsForwarder的后台服务一旦被系统杀了,新短信广播来了也没人接收,转发自然失效。
这类问题的排查链路可以这样走:
- 先打开SmsForwarder,看通知栏是否有常驻通知。如果通知栏是空的,说明App进程已经死了。
- 用另一张卡往这台手机发一条短信,观察是否有反应。没反应就是进程被杀。
- 在系统“设置 → 应用 → 应用启动管理”里找到SmsForwarder,确认是否被设置成“自动管理”。
5.2 华为/荣耀完整保活设置步骤
针对华为EMUI / 荣耀MagicUI,我按经验整理了一份从头到尾的设置顺序,照着做一遍基本能解决“不转发”的问题:
- 设置 → 应用 → 应用启动管理 → 找到SmsForwarder → 关闭“自动管理” → 弹出三个开关:允许自启动、允许关联启动、允许后台活动,全部打开。这一步是决定性的。
- 设置 → 电池 → 更多电池设置 → 关闭“省电模式”。如果电池百分比低于20%时系统自动开启省电,可以开“性能模式”或至少保证App在电量低时优先保留。
- 设置 → 应用 → 应用管理 → SmsForwarder → 耗电保护(或“电池”选项) → 选择“不限制”。
- 最近任务列表(多任务界面)把SmsForwarder的卡片下拉,看到右上角出现锁头图标,这一步防止一键清理时误杀。
- 打开SmsForwarder内的设置项:开启“开机自启动”和“通知栏常驻服务”,确保每次重启后服务自动拉起。
- 验证:锁屏放3-5分钟,再去通知栏确认常驻通知还在,然后发一条测试短信,看微信群或邮箱是否收到。
荣耀手机虽然系统改名为MagicUI,但设置入口和EMUI基本一致,按上面步骤操作就行。另外,部分华为机器在“手机管家”里还有一个“应用保活”列表,把SmsForwarder加进去更保险。
5.3 其他品牌的保活差异
不只是华为,几乎所有主流安卓厂商都有自己的后台管理策略,只是激进程度不同。我整理了不同品牌的保活设置位置,供你参考:
| 品牌 | 设置路径 | 关键操作 |
|---|---|---|
| 小米/Redmi MIUI | 设置 → 应用设置 → 应用管理 → SmsForwarder → 省电策略 | 选“无限制”;开启“自启动” |
| OPPO/realme ColorOS | 设置 → 电池 → 应用耗电管理 → SmsForwarder | 允许完全后台行为 |
| vivo OriginOS | 设置 → 电池 → 后台耗电管理 → SmsForwarder | 允许后台高耗电 |
| 三星 One UI | 设置 → 电池和存储 → 电池 → 后台使用限制 | 将SmsForwarder设为“不受限制” |
这些系统无一例外都有“杀后台”的倾向,所以配置完不能只测一次。正确姿势是:配置完成后,锁屏放半小时,再发短信验证一次,确认服务依然在跑,才算真正配置完成。
6. 实测数据、日志排查与两个容易忽略的坑
6.1 转发延迟与稳定性实测
稳定运行一段时间后,我记录的实测数据如下:
| 场景 | 延迟 | 说明 |
|---|---|---|
| 企业微信群机器人 | 1-3秒 | 延迟最低,推荐日常主力通道 |
| 钉钉群机器人 | 1-3秒 | 与企业微信相当 |
| 邮箱SMTP | 5-15秒 | 受邮件服务器投递影响 |
| Server酱 | 2-5秒 | 依赖微信公众号模板消息通道 |
从稳定性看,群机器人偶尔会在平台侧出现短暂的限流或延迟,但恢复很快。邮箱通道最稳但延迟略高。如果你对验证码类短信的即时性要求很高,企业微信和钉钉任选一个就够;如果只是做短信留底、归档,邮箱绰绰有余。
6.2 转发失败排查链路
配置完成但转发失败时,先别急着删规则,打开SmsForwarder底部的“日志”页,里面记录了每次短信接收、规则匹配、渠道发送的完整链路。日志里能看到:
- 短信收到时间、发送者、内容摘要
- 命中了哪条规则
- 尝试向哪些渠道发送
- 发送成功或失败的具体原因
如果看到HTTP 401/403,说明Webhook、Token或Secret不对,重新检查渠道信息;看到429,说明触发了平台频率限制,等一分钟再试或换通道;看到timeout,大概率是网络不通或目标平台网络波动,检查当前设备网络后重试。
日志是定位问题的第一入口,比看配置和规则更直观。这也是SmsForwarder做得好的地方:不是出了问题让你瞎猜,而是给你完整的证据链。
6.3 两个容易被忽略的坑
第一个坑是双卡换卡槽后SIM卡ID发生变化。双卡用户换卡槽之后,之前规则里选的“SIM卡1”可能就不是原来那张卡了,导致短信匹配不上规则。我踩过一次:换卡槽后测试短信始终不进微信,日志里显示短信收到了,但规则不匹配。排查半天发现规则绑的还是旧SIM卡ID,重新选择一下就好了。所以换卡后顺手把规则里的SIM卡重新确认一遍。
第二个坑是短信内容里的特殊字符可能导致部分IM平台渲染异常。钉钉、飞书这类平台对消息里的Markdown格式很敏感,如果短信原文里带了#、*、反引号之类的字符,推送出来的消息要么格式错乱,要么显示成原始标记。解决方法是去渠道配置里把“使用Markdown格式”关掉,或者把内容模板改成纯文本模式。正常情况下短信内容不需要Markdown渲染,纯文本最实用。
还有一个算不上坑但容易忽略的点:短信验证码属于敏感信息,转发到微信群或邮箱等于把收短信的能力搬到了群聊里,群成员、邮箱泄露都能看到验证码内容。建议给企业微信群设置好成员权限,邮箱也尽量用专门的小号,别和自己重要账号绑在一起。这个安全意识,用这类工具时不能省。