...

OpenWRT 接收的短信转发到 Email

发现网上的教程都是用ssmpt的方式来发送邮件,我的 OpenWRT 的版本是 23.05.1 的,官方源里没有安装包,软件包只有在 18.06 以下的版本才可以用,强制安装上会报错,所以我就用 msmpt 的方式来实现。在教程开始之前,必须给 OpenWRT 安装和配置好 4g 或 5g模块,插入了 SIM 卡,并能正常通信。在软件包找到 msmstp 和 mutt ,并安装。通过SSH连接到 OpenWRT。输入以下命令,编辑 msmstp 配置文件

vim /etc/msmtprc

填写以下内容

# Example for a system wide configuration file
# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail. 
account default

#这里用的是163邮箱的地址,修改成你自己邮箱对应的邮箱服务地址
host smtp.163.com 

# 设置是否加密传输
port 465
tls on
tls_starttls off

# 设置要发送的邮件,把 yourmail@163 改成你自己的邮件,需要在邮件设置里开启 IMTP功能,开启后用显示的令牌替换下面的 token
from [email protected]
auth login
user [email protected]
password token

#错误日志
syslog LOG_MAIL
logfile /var/log/msmtp.log 

输入以下命令,注意要区分大小写,编辑 Mutt 配置文件

vim /etc/Muttrc

填写以下内容,把 [email protected] 改成你自己的邮箱

set from="[email protected]"
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="[email protected]"
set editor="vim"

测试一下,把 [email protected] 改成你自己的邮箱,看能不能发送邮件,可以的话再执行下一步

echo "内容" | mutt -s "标题" [email protected]

在OpenWRT软件包里安装 iconv ,这个插件用来解决中文乱码问题。输入以下命令,编写把新接收的短信发送到邮箱的脚本

vim /root/pushsms.sh

输入以下内容,把下面的 yourmail@163 改成要接收邮件的邮箱,接收邮件的邮箱可以和发送邮件的邮箱相同,也就是自己发给自己。

#!/bin/sh
# 把刚接收的短信转换为文本
if [ "$1" == "RECEIVED" ]; then
    from=`grep "From:" $2 | awk -F ': ' '{printf $2}'`
    #sent=`grep "Sent:" $2 | awk -F ': ' '{printf $2}'`
    #received=`grep "Received:" $2 | awk -F ': ' '{printf $2}'`
    alphabet=`grep "Alphabet:" $2 | awk -F ': ' '{printf $2}'`

    if [ "$alphabet" = "UCS2" ]; then
        content=$(sed -e '1,/^$/ d' < "$2" | iconv -f UNICODEBIG -t UTF-8)
    else
        content=$(sed -e '1,/^$/ d' < "$2")
    fi

text=$(cat <<EOF
$from:
$content
EOF
)

# 把短信发送到邮箱
  echo "$text" | mutt -s "Giffgaff Messages" [email protected]

输入以下内容给 pushsms.sh 授权,这一步很重要,如果没执行一下命令,可能会导致无法发送邮件

chmod +x /root/pushsms.sh

在 OpenWRT 的软件包里安装 smstools3,输入以下命令,配置 smstool3

vim /etc/smsd.conf

填写以下内容

#
# Description: Main configuration file for the smsd
#

devices = GSM1
incoming = /var/spool/sms/incoming
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
failed = /var/spool/sms/failed
sent = /var/spool/sms/sent
receive_before_send = no
autosplit = 3

# 设置接收短信的编码格式为 utf8,不然会出现乱码
incoming_utf8 = yes
loglevel = notice
#delaytime = 0

# 这里链接刚才编写的脚本,意思是如果有新的短信就触发该脚本
eventhandler = /root/pushsms.sh

[GSM1]
# ME模式(将短信保存在上网卡中,更快,不支持的话请使用下面的 SM模式)
init = AT+CPMS="ME","ME","ME"
# SM模式(将短信保存在 USIM 卡中)
# init = AT+CPMS="SM","SM","SM"

# 这里要修改成你对应的端口号
device = /dev/ttyUSB2
incoming = yes
#pin = 0000

# 波特率一般都是115200,如果不对修改成你自己的
baudrate = 115200
signal_quality_ber_ignore = yes
detect_unexpected_input = no
memory_start = 0

重启 smsd 进程

/etc/init.d/smstools3 restart

最后用自己的手机给软路由的手机号发送短信,就可以在邮件里收到短信了。

参考文献:

[1] 设置邮箱接收消息 SMTP.
[2] 把接收的短信转换为文本.
[3] 解决乱码问题

2 评论
最旧
最新 最多投票
内联反馈
查看所有评论

请问用的什么路由器

网站运营需要成本,可以给我充电吗?

相似文章

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.