1. 项目概述与核心价值
如果你手头有一台闲置的安卓手机,或者你的主力机需要接收一些重要但频繁的通知(比如验证码、银行交易提醒、快递取件码),但又不想被这些信息频繁打扰,那么今天聊的这个工具,你一定会感兴趣。它叫SmsForwarder,中文名“短信转发器”,但它的能力远不止转发短信。简单来说,它是一个运行在安卓设备上的“信息中枢”,可以帮你把手机收到的短信、来电、乃至任意APP的通知,按照你设定的规则,自动转发到其他任何你方便接收的地方,比如另一个手机号、钉钉/飞书/企业微信群、邮箱,甚至是你的智能手表。
我最初接触它,是因为工作需要管理多个测试账号,每个账号的验证码都发到不同的备用机上,每天光找验证码就得花不少时间。后来,我把所有备用机的短信都转发到一个钉钉群里,问题迎刃而解。再后来,我发现它还能监控APP通知、远程查短信、甚至自动化执行任务,这完全就是一台“24小时在线的私人助理服务器”。它的核心价值在于“信息聚合与智能路由”,让你从被动的信息接收者,变成主动的信息管理者。无论是个人用来集中管理重要通知,还是开发者、运维人员用来做自动化监控和告警,它都是一个低成本、高自由度的解决方案。
2. 核心功能与工作原理深度解析
2.1 不止于短信:全方位的信息监控能力
很多人被它的名字“短信转发器”误导,以为它只能处理短信。实际上,从v3.x版本开始,它已经进化成了一个功能强大的Android设备事件监听与转发平台。其监控范围主要涵盖三大类:
- 短信(SMS):这是最基本也是最核心的功能。它可以监听手机收到的所有短信,包括普通短信和彩信。你可以根据发件人号码、短信内容关键词等条件进行过滤和转发。
- 通话(Call):监控手机的来电和去电。你可以设置规则,例如只转发来自特定联系人的未接来电,或者所有通话记录(包含号码、时间、时长)。
- 应用通知(Notification):这是它的“杀手级”功能。通过接入Android系统的“通知监听服务”(Notification Listener Service),它可以捕获手机上几乎所有APP产生的通知栏消息。这意味着,微信消息、钉钉工作通知、快递APP的取件提醒、服务器监控告警推送……只要是能出现在通知栏里的信息,它都能抓取并转发。
注意:启用“通知监听”权限需要用户在系统设置中手动授权,且不同手机品牌(如小米、华为、OPPO等)的授权路径和后台保活策略差异很大,这是后续配置中最容易出问题的环节之一。
2.2 丰富多样的转发通道:把信息送到任何地方
信息抓取到了,怎么送出去?SmsForwarder提供了极其丰富的转发通道(官方称为“发送方”),几乎覆盖了所有主流的信息传递方式:
- 即时通讯工具:支持钉钉、企业微信、飞书的群机器人或应用消息。这是最常用的方式,适合团队协作或个人集中查看。
- 邮件(SMTP):将信息通过邮件发送到指定邮箱。适合归档重要记录,或者转发给没有安装上述通讯工具的联系人。
- Webhook:这是一个通用接口,允许你将信息以HTTP POST请求的形式发送到任何自定义的服务器地址。这意味着你可以轻松地将信息集成到自己的运维系统、NAS的自动化脚本(如Home Assistant)、或第三方API服务中。
- Bark / PushDeer / Server酱 / PushPlus:这些是专为手机消息推送设计的服务。它们通常提供APP或微信小程序来接收消息,配置简单,非常适合个人使用。
- Telegram Bot:通过Telegram机器人发送消息到个人或群组。对于有海外服务需求的用户非常方便。
- 手机短信:将信息通过本机SIM卡以短信形式发送给另一个手机号。可以作为最终保底的通知方式,但可能产生运营商短信费用。
- 其他:如MQTT(物联网协议),可以将消息发布到MQTT服务器,实现与智能家居设备的联动。
为什么需要这么多通道?在实际使用中,冗余和分级告警是关键策略。例如,你可以设置:非重要的APP更新通知通过Bark推送到个人手机;重要的验证码和交易短信同时转发到钉钉工作群和个人邮箱;而服务器宕机等紧急告警,则通过“钉钉+短信+电话(可配合其他自动化工具)”三种方式确保必达。
2.3 规则引擎:实现精准化、自动化转发
如果所有信息都无脑转发,那只会造成信息轰炸。SmsForwarder的核心在于其可配置的规则引擎。每一条规则都包含几个关键部分:
- 触发条件(何时转发):可以基于“短信”、“来电”、“APP通知”等事件类型触发。
- 过滤条件(转发什么):这是规则的灵魂。你可以设置:
- 发件人/来电号码:完全匹配、前缀匹配、包含匹配。
- 内容关键词:检查信息内容是否包含(或排除)特定关键词。支持正则表达式,实现复杂匹配。
- 手机卡槽:双卡手机可以指定监听哪张SIM卡。
- 执行动作(转发到哪里):关联到前面提到的“发送方”。一条规则可以同时关联多个发送方,实现一键多投。
- 高级选项:如延迟发送、内容模板(自定义转发信息的格式)、是否包含手机电量/位置等附加信息。
例如,一条典型的规则可以是:“当收到来自955XX(银行)的短信,且内容包含‘验证码’或‘交易’关键词时,立即将其内容连同接收时间,通过钉钉群机器人和个人邮箱同时发送给我。”
2.4 客户端-服务器模式与远程控制(V3.0+)
这是SmsForwarder从“工具”迈向“系统”的重要一步。你可以将安装了SmsForwarder的备用机设置为服务端,然后在你的主力机或其他设备上安装客户端APP。
- 服务端:运行在备用机上,负责信息的监听、规则匹配和转发。
- 客户端:可以远程连接到服务端,实现以下控制:
- 远程发送短信:从客户端直接让服务端手机发短信。
- 查询短信/通话记录/联系人:远程读取服务端手机上的历史数据。
- 查看手机状态:获取服务端手机的电量、网络状态、位置等信息。
- 管理转发规则:远程添加、修改、启用/禁用规则。
这个模式极大地扩展了使用场景。比如,你可以把一台旧手机放在家里作为服务端,连接家庭Wi-Fi。当你在外面需要接收一个验证码到国内手机号时,可以直接用客户端的“远程发送短信”功能,让它给你的另一个号码发条短信,从而间接获取验证码。这比携带多台手机要方便得多。
2.5 自动任务与快捷指令(V3.3+)
这是最新的自动化增强功能。你可以创建定时任务或触发式任务,自动执行一系列操作。
- 定时任务:例如,每天上午9点,自动通过Webhook向你的打卡系统发送一条消息;或者每周一早上8点,查询备用机的电量并通过钉钉报告给你。
- 触发任务:可以与其他规则联动。例如,当收到“电量低于15%”的规则转发消息后,自动触发一个任务,通过客户端远程发送指令,让服务端手机播报一条语音提醒“请充电”。
这相当于在SmsForwarder内部集成了一个轻量级的自动化工作流引擎,让整个系统的智能化程度再上一个台阶。
3. 从零开始:详细配置与实操指南
理论讲完了,我们直接上手。假设我们的目标是把一台闲置的安卓手机(服务端)的所有银行验证码短信,转发到我们的钉钉工作群。
3.1 服务端(备用机)安装与基础配置
- 获取安装包:从项目的GitHub Release页面或国内Gitee镜像下载最新的APK文件。建议选择标有
release的稳定版。将APK文件传输到备用机上安装。 - 授予核心权限:安装后打开APP,它会逐一引导你开启所需权限,请务必全部允许。最关键的三项是:
- 短信读取/发送权限:用于监听和发送短信。
- 通知监听权限:点击后会跳转到系统“无障碍”或“特殊权限”设置页。你需要在这个系统页面中找到“SmsForwarder”或“短信转发器”,并打开开关。这是最容易失败的一步,不同手机品牌的位置可能叫“无障碍服务”、“辅助功能”、“Notification access”等。
- 电池优化忽略/自启动权限:为了保障APP能在后台长期运行,需要在系统设置中,将SmsForwarder设为“允许后台活动”、“允许自启动”、并“关闭电池优化”。各品牌手机设置路径不同,需要耐心查找。
- 初步运行与测试:权限给好后,回到APP。你可以先手动发送一条测试短信。在APP首页,点击底部的“发送”按钮,选择“短信”,输入你的另一个手机号,发送一条测试信息。如果能成功收到,说明基础短信发送功能正常。
3.2 配置钉钉群机器人发送通道
创建钉钉群机器人:
- 在钉钉PC端,进入你需要接收消息的群,点击右上角设置 -> 智能群助手 -> 添加机器人 -> 自定义机器人。
- 设置机器人名字,例如“短信助手”。安全设置选择“加签”,复制生成的
Secret。 - 创建完成后,复制完整的
Webhook地址,格式类似:https://oapi.dingtalk.com/robot/send?access_token=XXXXXX。
在SmsForwarder中添加发送方:
- 打开SmsForwarder,进入“发送方”页面,点击右下角“+”号。
- 选择“钉钉群机器人”。
- 名称:填写一个易于识别的名字,如“公司钉钉群”。
- Webhook:粘贴刚才复制的完整Webhook地址。
- Secret:粘贴复制的加签Secret。
- 点击“测试”按钮。如果配置正确,你的钉钉群将会收到一条来自该机器人的测试消息。务必测试成功后再进行下一步。
3.3 创建第一条转发规则
现在我们来创建规则,将银行验证码转发到钉钉。
- 进入规则页面:点击底部导航的“规则”,然后点击“+”号。
- 设置规则头:
- 规则名:“银行验证码转发”。
- 规则开关:保持开启。
- 匹配字段:选择“短信”。
- 设置发件人匹配:
- 点击“发件人包含”。我们知道银行短信通常来自
955XX这样的五位数号码。 - 在输入框中填写
955。这意味着任何发件人号码包含“955”的短信都会触发此规则(例如95533、95588、95599等)。你也可以使用“前缀是955”来更精确地匹配以955开头的号码。
- 点击“发件人包含”。我们知道银行短信通常来自
- 设置内容过滤(可选但建议):
- 点击“内容包含”。输入“验证码”。这样只有内容里带有“验证码”的短信才会被转发,避免了普通的银行营销短信也被转发。
- 你可以添加多个关键词,用
|分隔表示“或”关系,例如“验证码|动态码|校验码”。
- 关联发送方:
- 在“发送方”区域,点击“添加”,选择我们刚才创建的“公司钉钉群”。
- 你可以在这里添加多个发送方,比如同时再选一个“个人邮箱”通道。
- 配置消息模板:
- 点击“高级”,找到“内容模板”。这里可以自定义转发消息的格式。默认模板可能只包含短信内容。
- 一个更实用的模板可以是:
【银行验证码】来自{from}:{content} 接收时间:{time}。 - 其中
{from}、{content}、{time}是内置变量,分别会被替换为发件人号码、短信正文和接收时间。
- 保存并测试:
- 点击右上角“保存”。规则创建完成。
- 现在,用其他手机向这台备用机发送一条内容包含“验证码”的短信,发件人号码最好包含955(可以用另一台手机模拟)。几秒钟内,你的钉钉群就应该能收到格式化的转发消息了。
3.4 配置通知监听(以微信消息为例)
假设我们还想把备用机微信收到的特定群聊消息也转发出来。
- 确保通知权限已开启:再次检查系统“无障碍”设置中,SmsForwarder的通知监听权限是否已开启。
- 创建新规则:
- 规则名:“重要微信通知”。
- 匹配字段:选择“应用通知”。
- 配置应用与内容过滤:
- 点击“应用”,选择“微信”。(如果列表里没有,可能是微信还没产生过通知,可以先打开微信触发一条通知)。
- 点击“内容包含”,输入你关心的关键词,比如“项目群”、“紧急”等。也可以留空,转发所有微信通知(信息量会很大)。
- 理解通知内容的局限性:需要注意的是,由于Android系统限制和微信自身的加密,通过通知监听获取的微信消息内容,可能不完整或被折叠,特别是长消息可能只显示“你收到一条消息”。对于私聊,发件人显示为微信昵称;对于群聊,显示为“群名: 昵称”。这是正常现象,并非SmsForwarder的bug。
- 关联发送方并保存:关联到钉钉或你喜欢的其他通道,保存规则即可。
4. 高阶玩法与深度配置解析
4.1 使用Webhook实现无限可能
Webhook是SmsForwarder中最灵活的功能。它把收到的信息转换成一个HTTP POST请求发送出去。请求体默认是JSON格式,包含了所有消息详情。
一个典型的使用场景:集成到Home Assistant实现智能家居联动。
假设你希望当收到“快递已放入驿站”的短信时,家里的智能音箱能语音播报。
在SmsForwarder中配置Webhook发送方:
- 发送方类型选择“Webhook”。
- URL填写你的Home Assistant提供的Webhook地址,例如:
http://你的HA内网IP:8123/api/webhook/sms_forwarder。 - 请求头可以添加认证信息,如:
Authorization: Bearer YOUR_HA_LONG_LIVED_TOKEN。 - 内容类型选择
application/json。
在Home Assistant中创建自动化:
- 在
configuration.yaml中启用Webhook:webhook: - id: sms_forwarder local_only: true - 然后创建一个自动化,触发器选择“Webhook”,Webhook ID填
sms_forwarder。 - 在动作中,你可以解析收到的JSON数据(如
{{ trigger.json.content }}),判断是否包含“快递”关键词,然后触发TTS(文字转语音)服务,让音箱播报。
- 在
另一个场景:转发到自建服务器进行日志记录和分析。你可以写一个简单的Python Flask或Node.js服务,接收SmsForwarder的Webhook,将短信内容、时间、号码存入数据库,便于后续查询或进行更复杂的分析(如统计验证码来源、识别垃圾短信等)。
4.2 客户端-服务器模式实战:远程管理
服务端准备:
- 在备用机的SmsForwarder中,进入“远程控制”页面。
- 开启“HTTP服务端”开关。设置一个端口(默认8080)和一个连接密码。记下页面显示的内网地址,如
http://192.168.1.100:8080。 - 重要:确保备用机和你的客户端手机在同一个局域网(Wi-Fi)下。
客户端连接:
- 在你的主力机上安装SmsForwarder客户端(和服务端是同一个APK)。
- 打开客户端,进入“远程控制”页面,点击“添加服务端”。
- 名称随意,地址填写服务端显示的内网地址(
http://192.168.1.100:8080),密码填写刚才设置的。 - 保存后,点击连接。如果成功,客户端界面就会显示服务端手机的电量、网络等信息,并且可以使用下方的“发送短信”、“查询记录”等功能。
内网穿透(从外网访问):
- 如果你希望在外出时也能远程控制家里的备用机,就需要内网穿透。
- SmsForwarder内置了frpc客户端。你需要在公网有一台具有固定IP或域名的服务器(VPS),并在上面部署frps服务。
- 在服务端APP的“远程控制”设置中,配置frpc参数,指向你的公网服务器。这样,你就可以通过公网地址和端口来连接客户端了。这部分涉及网络知识,有一定门槛,但配置成功后非常方便。
4.3 利用自动任务实现智能场景
结合规则和自动任务,可以实现更复杂的逻辑。
场景:低电量自动告警并执行指令。
- 创建规则:创建一个规则,匹配“应用通知”,应用选择“系统UI”(或你的手机品牌对应的系统进程),内容包含“电量低于”。当手机弹出低电量提醒时,此规则会被触发。将其转发到一个特定的Webhook(比如IFTTT或自建服务器)。
- 创建自动任务:
- 在SmsForwarder的“自动任务”页面,创建任务。
- 触发器选择“接收到Webhook”,并配置一个用于内部触发的专用Webhook地址(可以在任务详情里生成)。
- 在动作中,添加“客户端指令”。这里可以模拟客户端操作,比如“发送短信”到你的主力机,内容为“备用机电量不足,请及时充电!”。
- 这样,当低电量规则被触发并调用这个内部Webhook时,自动任务就会执行,远程发送一条提醒短信给你。
5. 避坑指南与常见问题排查
在实际部署中,你会遇到各种各样的问题,尤其是安卓系统的碎片化和各厂商的定制化。以下是我踩过坑后总结的经验。
5.1 后台保活与权限持久化
这是SmsForwarder能否稳定运行的最大挑战。安卓系统为了省电,会严格控制后台应用的活动。
- 小米/Redmi手机:
- 必做步骤:进入“设置 -> 应用设置 -> 授权管理 -> 自启动管理”,允许SmsForwarder自启动。
- 重要步骤:进入“设置 -> 省电与电池 -> 应用智能省电”,找到SmsForwarder,选择“无限制”。
- 锁后台:多任务界面,长按SmsForwarder卡片,点击小锁图标锁定应用。
- 通知权限:有时需要单独在“应用管理”里授予“显示悬浮窗”和“锁屏显示”权限。
- 华为/荣耀手机:
- 进入“设置 -> 电池 -> 启动管理”,关闭SmsForwarder的“自动管理”,并手动打开“允许自启动”、“允许关联启动”、“允许后台活动”。
- 在“设置 -> 应用 -> 应用启动管理”中进行同样操作。
- 通用建议:
- 将SmsForwarder添加到手机的“游戏加速”或“性能模式”列表中(如果有),这些列表中的应用通常不会被轻易杀后台。
- 如果手机有“忽略电池优化”选项,务必为SmsForwarder选择“允许”。
- 终极方案:如果以上方法都失效,可以考虑使用ADB命令授予应用更高级的权限,但这需要一定的动手能力。
5.2 通知监听抓取不到内容
- 现象:规则已设置,但APP通知无法触发转发,或者转发内容为空。
- 排查:
- 确认权限:再次进入系统“无障碍”设置,确认SmsForwarder的开关是绿色开启状态。有时系统更新或重启后会关闭。
- 检查目标APP的通知权限:确保微信、钉钉等源APP本身的通知权限是打开的(系统设置 -> 通知 -> 对应APP)。
- 检查通知样式:有些手机(如OPPO、Vivo)的“锁屏通知”和“悬浮通知”是分开管理的,需要都开启。
- 测试监听:在SmsForwarder的“关于”或“日志”页面,通常有“测试通知监听”功能。触发一条测试通知,看看SmsForwarder能否捕获到。如果这里能捕获,但规则不触发,就是规则配置问题;如果这里都捕获不到,就是系统权限或兼容性问题。
- 查看日志:SmsForwarder有详细运行日志。当通知来时,查看日志文件,看是否有相应的监听记录和错误信息。
5.3 短信转发延迟或丢失
- 现象:短信收到了,但转发有几分钟延迟,或者根本没转发。
- 排查:
- 网络问题:检查备用机的网络连接是否稳定。如果是Wi-Fi,信号是否良好?如果是蜂窝数据,是否欠费或信号弱?转发通道(如钉钉机器人)所需的网络是否通畅?
- 手机休眠:确保手机设置了永不休眠,或者熄屏后Wi-Fi/数据连接保持活动。
- 规则冲突:检查是否有多条规则匹配同一条短信,导致处理异常。可以暂时禁用其他规则进行测试。
- 发送方限制:某些免费的消息通道(如Server酱免费版、企业微信机器人)有频率限制。短时间内触发过多消息,可能导致部分被丢弃。可以在规则的高级设置中,适当增加“延迟发送”时间,或升级发送方服务。
- 查看转发日志:在SmsForwarder的日志中,可以清晰地看到一条短信从“接收”到“规则匹配”再到“发送尝试”的全过程。根据日志定位是哪个环节出了问题。
5.4 客户端无法连接服务端
- 现象:在客户端输入正确的内网IP和密码,但连接失败。
- 排查:
- 防火墙:检查服务端手机的防火墙或安全软件是否阻止了8080端口的连接。可以尝试更换一个端口(如8081)再试。
- IP地址变化:家庭路由器DHCP分配的IP地址可能会变。建议在路由器后台为备用机设置静态IP(DHCP保留),这样内网地址就固定了。
- 不在同一网络:确认客户端和服务端连接的是同一个Wi-Fi网络。有时手机可能同时连着Wi-Fi和移动数据,导致实际出口IP不同。
- 服务未运行:确认服务端APP的“HTTP服务端”开关是打开的,并且APP在前台或后台正常运行(没有被系统杀死)。
经过以上步骤的配置和排错,你的SmsForwarder应该就能稳定可靠地运行起来了。它就像给你的备用机注入了一个灵魂,让一台旧设备重新焕发生机,成为你数字生活中一个默默无闻却又无比得力的助手。从简单的短信聚合,到复杂的自动化场景,它的可玩性和实用性远超其名字给人的第一印象。