在Linux系统中发送短信是企业级应用、自动化运维和物联网场景中的常见需求,本文将详细介绍通过Linux系统发送短信的多种方法,包括硬件方案、软件工具及云服务集成,帮助读者根据实际场景选择合适的解决方案。

硬件方案:调制解调器与短信网关
硬件方案适用于需要稳定、高频短信发送的场景,如银行验证码、企业通知等,核心设备是支持GSM的调制解调器或短信网关,这些设备通常通过USB或串口与Linux服务器连接。
设备选型与连接
常见的GSM调制解调器包括华为E173、西门子MC35i等,支持AT指令集控制,连接时需确保设备被Linux系统识别,可通过lsusb或dmesg命令查看设备信息,华为E173插入后通常会被识别为/dev/ttyUSB0设备。
AT指令控制
AT指令是控制调制解调器的标准命令集,通过minicom或screen工具可手动发送指令,发送短信的基本流程包括:
- 初始化调制解调器:
AT+CMGF=1(设置文本模式) - 目标号码:
AT+CMGS="13800138000" - 输入短信内容后以
Ctrl+Z发送 - 查询发送状态:
AT+CMGS?
自动化脚本实现
将AT指令封装到Shell脚本中可实现自动化发送,以下是一个基础示例:
#!/bin/bash MODEM="/dev/ttyUSB0" NUMBER="13800138000" MESSAGE="Hello from Linux" echo -e "AT+CMGF=1\r" > $MODEM sleep 1 echo -e "AT+CMGS=\"$NUMBER\"\r" > $MODEM sleep 1 echo -e "$MESSAGE\cZ" > $MODEM sleep 2 cat $MODEM
实际应用中需处理设备权限、超时错误等问题,建议使用screen -L记录日志以便调试。

软件工具:开源短信平台
开源软件方案适合需要定制化功能的场景,如企业内部通讯系统,常用的工具包括Kannel、SMSTools等。
SMSTools配置
SMSTools是一个成熟的短信收发管理工具,支持多调制解调器并行工作,配置步骤如下:
- 安装:
sudo apt-get install smstools - 编辑配置文件
/etc/smsd.conf,设置设备路径、日志级别等 - 创建短信队列目录
/var/spool/sms - 通过
sendmail命令发送短信:echo "短信内容" | sendmail "号码"
SMSTools支持短信优先级、重试机制和状态报告,适合高可靠性要求的场景。
Kannel网关
Kannel是功能强大的开源WAP/SMS网关,支持HTTP接口和数据库集成,其优势在于可扩展性强,适合大规模部署,核心配置包括:
- 定义SMS中心(SMSC)参数
- 设置路由规则
- 通过HTTP API发送短信:
http://localhost:13013/cgi-bin/sendsms?text=测试&to=13800138000
Kannel支持MySQL/PostgreSQL存储短信历史,便于后续查询和统计。

云服务API:无需硬件的轻量方案
对于中小型应用,集成第三方云服务是最便捷的选择,国内主流云服务商如阿里云、腾讯云,以及Twilio等国际平台均提供短信API服务。
阿里云短信服务
- 开通服务并获取AccessKey
- 调用API发送短信,Python示例:
import requests
url = “https://dysmsapi.aliyuncs.com/”
params = {
“PhoneNumbers”: “13800138000”,
“SignName”: “签名名称”,
“TemplateCode”: “SMS_12345678”,
“TemplateParam”: ‘{“code”:”123456″}’,
“AccessKeyId”: “your_access_key_id”,
“Signature”: “your_signature”
}
response = requests.get(url, params=params)
print(response.json())
需注意模板审核和签名备案流程。
#### 2. Twilio国际短信
- 注册账户获取Account SID和Auth Token
- 使用其Python库发送:
```python
from twilio.rest import Client
client = Client("ACCOUNT_SID", "AUTH_TOKEN")
message = client.messages.create(
body="Hello from Twilio",
from_="+1234567890",
to="+8613800138000"
)
print(message.sid)
安全与最佳实践
无论采用哪种方案,安全性都是首要考虑因素:
- 敏感信息保护:避免在脚本中硬编码API密钥,建议使用环境变量或配置文件加密存储。
- 发送频率控制:遵守运营商限制,避免被标记为垃圾短信。
- 日志监控:记录发送状态和错误信息,建立告警机制。
- 成本优化:根据发送量选择合适的计费模式,云服务通常提供阶梯定价。
常见问题与解决方案
- 设备无响应:检查串口权限(
chmod 666 /dev/ttyUSB*)和驱动加载情况。 - 短信编码问题:中文短信需使用
UCS2编码,可通过iconv工具转换。 - 云服务超时:增加重试逻辑并检查网络连接稳定性。
Linux系统发送短信的技术方案需结合场景需求综合选择,硬件方案稳定性高但成本较高,开源软件适合定制化开发,云服务则具备快速部署的优势,随着5G和物联网的发展,Linux在短信通信领域的应用将持续深化,开发者可根据实际需求灵活组合多种技术,构建高效可靠的短信通信系统。


















