关于触发器的通知,最开始有三种打算 微信公众号、 邮箱、 HTTP,最后发现微信公众号平台无法主动向用户推送消息,所以微信公众号暂时不做了,看看有没有其他的解决方案
搭建SMTP服务
发送邮件可以借助第三方平台如163、QQ等等,但是使用个人账户去做都是有最大发送数量限制的,为了稳妥起见还是决定搭建自己的STMP服务来发送邮件。
以ubuntu 14.04为例:借助于postfix搭建SMTP服务
- 安装
apt-get install mailutils
在设置页面选择Internet site
- 配置
vim /etc/postfix/main.cf # 修改以下内容 myhostname = mail.youraddress mydomain = youraddress myorigin = admin@youraddress mydestination = $myhostname, localhost.$mydomain, $mydomain
- 重启服务
service postfix restart
- 测试
echo “This is the body of the email” | mail -s “This is the subject line” your_email_address
检查是否能够收到邮件,如果没有请检查服务器25端口是否开放,(腾讯云的默认是关闭的需要去申请解封)
邮箱服务
python 自带两个模块可以实现发送邮件的功能,email和 smtplib,email负责构造邮件内容,smtplib用来发送邮件
下面是最简单的一个发送示例
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send(receiver,payload):
sender = 'admin@iotforfml.cn'
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText(payload, 'plain', 'utf-8')
# 邮件标题
subject = '触发器报警通知'
message['Subject'] = Header(subject, 'utf-8')
try:
smtp_obj = smtplib.SMTP('localhost')
smtp_obj.sendmail(sender, receiver, message.as_string())
except smtplib.SMTPException:
pass
send('1193589986@qq.com','aaaa')
结果:
何时发送,怎么判断是否需要发送报警邮件,这个问题会放到持久化服务里面去判断,接受消息后就应该判断是否触发,具体的实现我想放到后面整合的时候在说,这里只是简单的实现一个发送邮件的接口