SmsForwarder - listens to SMS, incoming calls, and App notifications on Android mobile devices, and forward according to user defined rules to another App/device, including DingTalk, WeCom and WeCom Group Bot, Feishi Bot, E-mail, Bark, Webhook, Telegram Bot, ServerChan, PushPlus, SMS, etc.
* Any code/APK of `SmsForwarder` related to the this repository is for test, study, and research only, commercial use is **prohibited**. Legality, accuracy, completeness and validity of any code/APK of this repo is guaranteed by **NOBODY**, and shall only be determined by User.
* `pppscn` and/or any other Contributor to this repo is **NOT** responsible for any consequences (including but not limited to privacy leakage) arising from any user's direct or indirect use or dissemination of any code or APK of `SmsForwarder`, regardless of whether such use is in accordance with the laws of the country or territory where such user locates or such use or dissemination occurs.
* Should any entity finds the code/APK of this repo infringing their rights, please provide notice and identity and proprietorship document, and we will delete relating code/APK after examining such document.
* Privacy: `SmsForwarder` collects absolutely **NO** any of your personal data!! Except 1) version information to umeng.com for stats as the App starts, and 2) version number when manually check for update, `SmsForwarder` is **NOT** sending any data without users' knowledge.
--------
## Features and standards
**Simplicity** - `SmsForwarder` does two things only: Listen to "SMS service/Incoming calls/App notifications", and forward according to rules specified by user.
Benefit by simplicity:
* **E**fficient: (It's inconvenient to read the security codes such as OTP on a mobile phone, when you are using another device; and no solution satisfices our needs)
> + AirDroid: Too many functionalities, power consuming, requiring to many permissions, data relayed by a 3rd party, paid premium service...
> + IFTTT: Too many functionalities, power consuming, requiring to many permissions, data relayed by a 3rd party, paid premium service...
> + And other Apps (e.g. Tasker) with similar features.
* **E**nergy friendly: listens to broadcast only when running, and forwards message only when texts are received and logs recent forwarding contents and status.
* **E**ndurance: "Simplicity is the Ultimate Sophistication." The simpler the code is, the less it errs or crashes; that is what make the app runs longer.
### Workflow:
![工作流程](pic/working_principle.png "工作流程")
### Features:
- [x] Listen to SMS service, and forward according to user-defined rules (SMS contents to destination);
- [x] Forward to DingTalk Bot (to a group chat and @SOMBODY);
- [x] Forward to E-mail (SMTP with SSL encryption);
- [x] Forward to Bark;
- [x] Forward to webhook (a single web page [sending POST/GET requests to a designated URL](doc/POST_WEB.md));
- [x] Forward to WeCom Bots;
- [x] Forward to WeCom enterprise channels;
- [x] Forward to ServerChan·Turbo;
- [x] Forward to Telegram Bots (Proxy support ready);
- [x] Forward to another mobile phone via SMS [Note: Paid service, carriers may charge for SMS forwarding. SMS forwarding should apply with filtered rules when device has no Internet access.]
- [x] Check for new version and upgrade;
- [x] Cache purge;
- [x] Compatible with Android 5.xx, 6.xx, 7.xx, 8.xx, 9.xx, and 10.xx;
- [x] Support for dual SIM slots smartphones and label different slots/carrier/phone number (if available);
- [x] Support for multi-level rules;
- [x] Support for customized labeling of SIM slots and device, and customized forwarding templates;
- [x] Support for rules with regular expression
- [x] Support for rules for different SIM slots;
- [x] Forward missed call information (forwarded by SIM1 slot by default);
- [x] Retry 5 times after a failed request (customized interval time, stop retrying once successfully request);
- [x] Forward to FeiShu Bot;
- [x] Customized scheme (forwarder://main) wake up other Apps;
- [x] Monitor of battery status changes;
- [x] I18n support (Chinese and English currently);
- [x] Support for setting import and export functions (One-key cloning);
- [x] Listen to notifications of other Apps and forward;
- [x] Forward to PushPlus;
- [x] Support for customized template of forwarding rules (default template overrides if left blank);
- [x] Support for variables in regular expression of forwarding rules;
--------
### Screenshot:
| Docking in Ntf. screen | Main screen | Forward rules | Forward detail |
+ [![GitHub license](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg?_ga=2.126618957.1361252949.1638261367-1417196221.1635638144&_gl=1*1pfl3dq*_ga*MTQxNzE5NjIyMS4xNjM1NjM4MTQ0*_ga_V0XZL7QHEB*MTYzODMzMjA4OC43LjAuMTYzODMzMjA5Ny4w)](https://jb.gg/OpenSourceSupport) (License Certificate for JetBrains All Products Pack)
--------
## Star this repo if you find this application useful!
[![starcharts stargazers over time](https://starchart.cc/pppscn/SmsForwarder.svg)](https://github.com/pppscn/SmsForwarder)
SmsForwarder - listens to SMS, incoming calls, and App notifications on Android mobile devices, and forward according to user defined rules to another App/device, including DingTalk, WeCom and WeCom Group Bot, Feishi Bot, E-mail, Bark, Webhook, Telegram Bot, ServerChan, PushPlus, SMS, etc.
* Any code/APK of `SmsForwarder` related to the this repository is for test, study, and research only, commercial use is **prohibited**. Legality, accuracy, completeness and validity of any code/APK of this repo is guaranteed by **NOBODY**, and shall only be determined by User.
* `pppscn` and/or any other Contributor to this repo is **NOT** responsible for any consequences (including but not limited to privacy leakage) arising from any user's direct or indirect use or dissemination of any code or APK of `SmsForwarder`, regardless of whether such use is in accordance with the laws of the country or territory where such user locates or such use or dissemination occurs.
* Should any entity finds the code/APK of this repo infringing their rights, please provide notice and identity and proprietorship document, and we will delete relating code/APK after examining such document.
* Privacy: `SmsForwarder` collects absolutely **NO** any of your personal data!! Except 1) version information to umeng.com for stats as the App starts, and 2) version number when manually check for update, `SmsForwarder` is **NOT** sending any data without users' knowledge.
--------
## Features and standards
**Simplicity** - `SmsForwarder` does two things only: Listen to "SMS service/Incoming calls/App notifications", and forward according to rules specified by user.
Benefit by simplicity:
* **E**fficient: (It's inconvenient to read the security codes such as OTP on a mobile phone, when you are using another device; and no solution satisfices our needs)
> + AirDroid: Too many functionalities, power consuming, requiring to many permissions, data relayed by a 3rd party, paid premium service...
> + IFTTT: Too many functionalities, power consuming, requiring to many permissions, data relayed by a 3rd party, paid premium service...
> + And other Apps (e.g. Tasker) with similar features.
* **E**nergy friendly: listens to broadcast only when running, and forwards message only when texts are received and logs recent forwarding contents and status.
* **E**ndurance: "Simplicity is the Ultimate Sophistication." The simpler the code is, the less it errs or crashes; that is what make the app runs longer.
### Workflow:
![工作流程](pic/working_principle.png "工作流程")
### Features:
- [x] Listen to SMS service, and forward according to user-defined rules (SMS contents to destination);
- [x] Forward to DingTalk Bot (to a group chat and @SOMBODY);
- [x] Forward to E-mail (SMTP with SSL encryption);
- [x] Forward to Bark;
- [x] Forward to webhook (a single web page [sending POST/GET requests to a designated URL](doc/POST_WEB.md));
- [x] Forward to WeCom Bots;
- [x] Forward to WeCom enterprise channels;
- [x] 转发到ServerChan(Server酱·Turbo版)
- [x] Forward to Telegram Bots (Proxy support ready);
- [x] Forward to another mobile phone via SMS [Note: Paid service, carriers may charge for SMS forwarding. SMS forwarding should apply with filtered rules when device has no Internet access.]
- [x] Check for new version and upgrade;
- [x] Cache purge;
- [x] Compatible with Android 5.xx, 6.xx, 7.xx, 8.xx, 9.xx, and 10.xx;
- [x] Support for dual SIM slots smartphones and label different slots/carrier/phone number (if available);
- [x] Support for multi-level rules;
- [x] Support for customized labeling of SIM slots and device, and customized forwarding templates;
- [x] Support for rules with regular expression
- [x] Support for rules for different SIM slots;
- [x] Forward missed call information (forwarded by SIM1 slot by default);
- [x] Retry 5 times after a failed request (customized interval time, stop retrying once successfully request);
- [x] Forward to FeiShu Bot;
- [x] Customized scheme (forwarder://main) wake up other Apps;
- [x] Monitor of battery status changes;
- [x] I18n support (Chinese and English currently);
- [x] Support for setting import and export functions (One-key cloning);
- [x] Listen to notifications of other Apps and forward;
- [x] Forward to PushPlus;
- [x] Support for customized template of forwarding rules (default template overrides if left blank);
- [x] Support for variables in regular expression of forwarding rules;
--------
### Screenshot:
| Docking in Ntf. screen | Main screen | Forward rules | Forward detail |
+ [![GitHub license](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg?_ga=2.126618957.1361252949.1638261367-1417196221.1635638144&_gl=1*1pfl3dq*_ga*MTQxNzE5NjIyMS4xNjM1NjM4MTQ0*_ga_V0XZL7QHEB*MTYzODMzMjA4OC43LjAuMTYzODMzMjA5Ny4w)](https://jb.gg/OpenSourceSupport) (License Certificate for JetBrains All Products Pack)
--------
## Star this repo if you find this application useful!
[![starcharts stargazers over time](https://starchart.cc/pppscn/SmsForwarder.svg)](https://github.com/pppscn/SmsForwarder)
<stringname="notification_content">Forward to DingTalk/WeCom/FeiShu/Email/Bark/ServerChan/Telegram/Webhook, etc</string>
<stringname="notification_content">Forward SMS (and others!) to another app/device, a must-have for anyone's secondary smartphone. Free and open source, do NOT buy or sell this App.</string>
<stringname="invalid_bark_server">Bark-server cannot be empty</string>
<stringname="invalid_apiToken_or_chatId">Neither ApiToken nor ChatId can be empty</string>
<stringname="invalid_sendkey">SendKey cannot be empty</string>
<stringname="invalid_webserver">WebServer cannot be empty</string>
<stringname="invalid_webhook">webHook cannot be empty</string>
<stringname="invalid_at_mobiles">The specified member cannot be empty or select @all</string>
<stringname="invalid_phone_num">Phone number cannot be empty</string>
<stringname="invalid_bark_server">Bark-server cannot be blank</string>
<stringname="invalid_apiToken_or_chatId">Neither ApiToken nor ChatId can be blank</string>
<stringname="invalid_sendkey">SendKey cannot be blank</string>
<stringname="invalid_webserver">WebServer cannot be blank</string>
<stringname="invalid_webhook">Webhook cannot be blank</string>
<stringname="invalid_at_mobiles">The specified member cannot be blank or select @all</string><!-- “指定成员 不能为空 或者 选择@all” 这句话是什么意思?“指定成员既不能为‘空’也不能为‘选择@all’”吗?还是“指定成员不能为空,或者可以@all”呢?-->
<stringname="invalid_phone_num">Phone number cannot be blank</string>
<stringname="new_sender">New Sender</string>
<stringname="set_bark_name">Bark Group Name</string>
<stringname="set_bark_server">Bark-Server, e.g. https://bark.bms.ink/XXXXXXXX/</string>
<stringname="WebNotifyWebServer">WebServer e.g. https://a.b.com/msg?token=xyz</string>
<stringname="WebNotifyWebParams">WebParams e.g. payload=%7B%22text%22%3A%22[msg]%22%7D [msg] will be replaced with text message content. \nSupport Json format, for example: {"text":[MSG]}.\n Note: MSG is automatically utF-8 encoded in addition to JSON format</string>
<stringname="WebNotifySecret">Secret (If empty, sign is not counted)</string>
<stringname="WebNotifySecret">Secret (sign is not counted if left blank)</string>
<stringname="SmsSimSlot">Sim Slot</string>
<stringname="same_source">Same source</string>
<stringname="SmsMobiles">Receive mobile phone numbers separated by, e.g. 15888888888;19999999999</string>
<stringname="enable_regex_replace_tips">Format: RegularExpression===ReplacementResult,One rule per line.\ne.g. (\\d{3})\\d+(\\d{4})===$1****$2</string>
<stringname="regex_check_tips">Format check: line %d is badly formatted! Format: RegularExpression===ReplacementResult</string>
<stringname="enable_exclude_from_recents">Exclude from recents</string>
<stringname="enable_exclude_from_recents_tips">After this function is enabled, manual killing of processes is effectively avoided, which helps to keep the process alive</string>
<stringname="enable_exclude_from_recents">Hide from recent Apps</string>
<stringname="enable_exclude_from_recents_tips">Enable to hide SmsForwarder from recent Apps to keep it alive</string>
<stringname="init_setting_tips">Are you sure you want to restore the initial configuration? \n\n[Warning] This operation will reset Settings, delete send channels, rules, logs!</string>
<stringname="init_setting_tips">Are you sure you want to restore the initial configuration? \n\n[Warning] This operation will reset settings, and delete senders, rules, and logs!</string>
<stringname="mu_rule_tips">多重匹配规则示例:\n \n 并且 是 手机号 相等 10086\n 或者 是 手机号 相等 10011\n 并且 是 短信内容 包含 欠费\n \n 以上规则表示:收到短信,并且(手机号是10086 或者 手机号是10010),并且 短信内容 包含 欠费 时转发短信\n Note: Space(s) at beginning of each line indicates rule hierarchy, complicity of multiple rules may causes large memory usage!</string>
<stringname="mu_rule_tips2">多重匹配规则示例:\n \n 并且 是 包名 相等 com.tencent.mm\n 或者 是 包名 相等 com.tencent.mm\n 并且 是 通知内容 包含 欠费\n \n 以上规则表示:收到APP通知,并且(包名是com.tencent.mm 或者 包名是com.tencent.mm),并且 通知内容 包含 欠费 时转发通知\n Note: Space(s) at beginning of each line indicates rule hierarchy, complicity of multiple rules may causes large memory usage!</string>
<stringname="post">POST</string>
<stringname="get">GET</string>
<!--CloneActivity-->
<stringname="local_ip">Local IP:</string>
<stringname="operating_instruction">Operation instructions: \n1. Please keep the old and new phones in the same WiFi network, and do not turn on isolation \n2.The old mobile phone directly click "send" button, get "server IP" \n3. After filling in "Server IP" for the new mobile phone, click "Receive" button \n [note], the sender and forwarding rules will be completely covered after the new mobile phone receives!</string>
<stringname="operating_instruction">Instructions: \n1. Please keep the SOURCE and DESTINATION phones in the same Wi-Fi network, and do not turn on isolation. \n2. Tap "Send" on SOURCE mobile phone, and get "server IP" \n3. After filling in "Server IP" on DESTINATION phone, tap "Receive". \n [NOTE:] sender(s), forwarding rule(s) and log(s) will be overwritten after cloning!</string><!-- 原文是“新旧手机”,英文翻译中处理为“源”手机和“目标”手机,因为担心“新旧”的表述引起混淆(有没一种可能就是用户就是用从新手机的设备复制到旧手机上去呢?)。 -->
<stringname="send">Send</string>
<stringname="stop">Stop</string>
<stringname="old_mobile_phone">I\'m the old phone</string>
<stringname="old_mobile_phone">I\'m the SCOURCE phone</string>
<stringname="receive">Receive</string>
<stringname="new_mobile_phone">I\'m the new phone</string>
<stringname="new_mobile_phone">I\'m the DESTINATION phone</string>
<stringname="server_ip">Server IP: </string>
<stringname="point">.</string>
<stringname="invalid_ip">Please enter a valid IP address</string>
<stringname="server_has_started">The server is started successfully</string>
<stringname="server_has_stopped">The server has been stopped</string>
<stringname="sender_cannot_receive">This mobile phone is the sender and cannot receive files.</string>
<stringname="no_wifi_network">If the Wifi network is not connected, the one-click cloning function cannot be used.</string>
<stringname="sender_cannot_receive">This mobile phone is the SOURCE and cannot receive files.</string>
<stringname="no_wifi_network">One-tap cloning function does NOT work without Wi-Fi connection.</string>
<stringname="invalid_server_ip">Please enter a valid server IP address</string>
<stringname="failed_to_get_ip">Failed to get an IP address</string>
<stringname="sms">SMS</string>
<stringname="call">Call</string>
<stringname="app">App</string>
<stringname="appicon">App Icon</string>
<stringname="user_app">User App</string>
<stringname="system_app">System App</string>
<stringname="tips_battery_optimization">Please set the power saving optimization to unlimited (no optimization), which is conducive to the survival of SMS forwarder!</string>
<stringname="tips_notification_listener">Please grant the right to use SMS forwarder notification first, otherwise the APP notification cannot be forwarded and the forwarding will be automatically closed!</string>
<stringname="tips_battery_optimization">Please deactivate power optimization for SmsForwarder, in order to keep the App alive!</string>
<stringname="tips_notification_listener">Please grant Notification reading permission to SmsForwarder, before other Apps' notification could be forwarded. Forwarding automatically canceled!</string>
<stringname="notification_listener_service_enabled">The notification service is enabled</string>
<stringname="notification_listener_service_disabled">The notification service is disabled</string>