Language: English | 简体中文
Self-hosted SMS inbox and sender for an Android phone that stays at home. Remote SMS lets one phone receive, store, and send SMS messages, while any trusted browser can read messages, send from a selected SIM card, and monitor the phone's health.
Many people keep a spare phone only for SMS: bank verification codes, work numbers, platform accounts, regional numbers, physical SIM cards that cannot move to eSIM, or dual-SIM and multi-SIM setups. Remote SMS lets that phone stay in one safe place instead of traveling with you.
Useful when you want to:
- Stop carrying several phones just to receive verification codes.
- Keep physical SIM cards available when eSIM is unsupported or unavailable.
- Manage dual-SIM or multi-SIM phones and choose which SIM sends a message.
- Keep backup numbers, work numbers, and sign-up numbers in one fixed place.
- Access regional, low-frequency, IoT-related, or data-plan-linked numbers remotely.
- Read and send SMS from another phone, tablet, laptop, or desktop browser.
- Self-host SMS access through your own LAN, router, frp tunnel, reverse proxy, or VPN.
| Feature | Description |
|---|---|
| Phone as the server | The Android app includes an embedded web server on port 8787. |
| Remote SMS inbox and sender | Read incoming messages and submit outgoing messages from the web UI. |
| Multi-SIM support | Select a specific SIM card when sending SMS. |
| Device dashboard | View battery, memory, storage, network, uptime, SMS count, SIM information, and send-bridge status. |
| Search and filters | Search by number, note, message body, send status, direction, SIM card, or verification-code-only view. |
| Verification-code helper | Automatically highlights likely verification codes and provides one-tap copy. |
| Configurable email forwarding | Forward incoming SMS to any mailbox through your own SMTP server, with sender, recipient, host, port, security mode, username, and password all configurable at runtime. |
| Notes and exports | Add local notes for frequent numbers, and export filtered messages as CSV or JSON. |
| Health alerts | Shows low battery, high storage usage, network loss, memory pressure, and send-bridge issues. |
| Mobile-friendly UI | Compact layout works well from another phone. |
| Password-protected access | Protected APIs require a Bearer Token, configurable from the app or web settings. |
| Email delivery logs | SMTP send success and failure are written into the app log and visible from the web log view. |
| No hardcoded tunnel or mail secrets | frp URL, server address, ports, auth token, web password, and SMTP settings are configured at runtime. |
| Outgoing message history | Sent messages are recorded locally with sending, sent, delivered, or failed status. |
| Smartisan compatibility path | Includes a local shell bridge for Smartisan Pro 2S, where app-level SmsManager may be silently blocked. |
| Self-hosted by design | SMS data stays on the phone, and you control the access path. |
Device IDs, phone numbers, and message-list details are masked where needed.
android/ Android app and embedded web server
tools/sms-bridge/ Shell-side SMS bridge for Smartisan OS edge cases
tools/start-phone-services.sh
server/ Legacy Node.js web/API server for optional desktop testing
docs/assets/ README screenshots
- Install and open the Android app on the phone.
- The app starts an embedded web server on port
8787. - Incoming SMS messages are saved locally on the phone.
- If SMTP is configured, each newly received SMS can also be forwarded by email with the original SMS body preserved.
- A trusted browser connects to the phone and reads messages after password authentication.
- To send SMS, choose a SIM card in the web UI, enter the recipient and message body, then submit.
- The web UI also shows device health, service status, and app logs including email delivery results.
For USB testing:
adb forward tcp:8787 tcp:8787Then open:
http://127.0.0.1:8787
For LAN or tunnel access:
http://<phone-ip>:8787
You can also publish it through your own frp endpoint, public domain, reverse proxy, or VPN.
No frp address, frp token, web access password, or SMTP credential is hardcoded in the app.
Open the Android app and use 访问设置 to configure:
- Web access password
- Public frp URL
- frp server address
- frp server port
- frp remote port
- frp auth token
- SMTP host
- SMTP port
- SMTP security mode (
ssl,starttls, ornone) - SMTP username
- SMTP password or app-specific authorization code
- Sender email address
- Recipient email address
Incoming SMS forwarding keeps the SMS body unchanged. Email send success or failure is appended to the in-app log and can be reviewed from the web log page.
The values are stored only in Android SharedPreferences on the phone.
On the tested Smartisan Pro 2S, normal SmsManager calls from an app UID are accepted but do not reach the radio layer. The workaround is a local bridge started by adb shell, which submits SMS through Android's isms service.
Build and push the bridge:
javac -source 8 -target 8 \
-bootclasspath .tools/android-sdk/platforms/android-35/android.jar \
-d /tmp/sms-bridge-build/classes \
tools/sms-bridge/SmsBridge.java
.tools/android-sdk/build-tools/35.0.0/d8 \
--min-api 23 \
--output /tmp/sms-bridge-build/dex \
/tmp/sms-bridge-build/classes/SmsBridge*.class
cd /tmp/sms-bridge-build/dex
zip -q /tmp/sms-bridge.jar classes.dex
adb shell 'mkdir -p /data/local/tmp/sms-bridge'
adb push /tmp/sms-bridge.jar /data/local/tmp/sms-bridge/sms-bridge.jar
adb push tools/start-phone-services.sh /data/local/tmp/sms-bridge/start-phone-services.sh
adb shell 'chmod 755 /data/local/tmp/sms-bridge/start-phone-services.sh'Start it after a reboot:
adb shell /data/local/tmp/sms-bridge/start-phone-services.shThe app checks 127.0.0.1:8790/health and shows whether the bridge is connected.
All protected endpoints require:
Authorization: Bearer <web-access-password>
Endpoints:
GET /api/messages?limit=10&offset=0GET /api/simsPOST /api/sendGET /api/configPOST /api/configGET /api/deviceGET /health
- Do not expose port
8787directly to the public internet without additional protection. - Use frp, a reverse proxy, HTTPS, access control, or VPN where appropriate.
- Use a strong web access password.
- Do not commit frp credentials, web passwords, SMTP usernames, or SMTP passwords to Git.
- For important verification-code accounts, restrict access to trusted devices and networks.
- Keep the phone charged, connected, and within carrier SMS limits.




