Python 处理邮件和机器人的实用姿势
没有看不到的消息,只有不想回的人。
电子邮件是最古老的互联网应用之一。在移动互联网和即时通讯没爆发前,邮件是人们沟通的主要形式。
和HTTP网页服务一样,电子邮件也有自己的协议:
SMTP
:用来发邮件的协议。POP3
:用来收邮件的协议,数据单向从邮箱传递给客户端。IMAP
:是POP3
的扩展,可以浏览摘要后再选择下载邮件,也可以从本地同步数据给邮箱。
Python提供了4个标准模块处理邮件:
smtplib
,用于发邮件。poplib
,用POP3
协议收邮件。imaplib
,用IMAP
协议同步客户端和邮箱数据。email
,用于解析邮件内容结构。
20年前,只要你能连到互联网,就能提供邮箱服务。那时候的互联网,除了门户网站,就是电子邮件。
随着准入门槛的提高,目前邮箱服务主要由电信运营商和几个互联网巨头提供,以Web版和App客户端为主,一般都需要独立授权码才能开启三方客户端访问其SMTP/IMAP/POP3
接口。
邮件主要的2个用途:正式沟通、自动通知。
“正式沟通”指较为正式的事项确认,工作中较常见。
“自动通知”指主动发送或者当条件出发时自动发送邮件。
“自动通知”的应用范围较广,如订阅频道后定期推送内容,代码构建失败后通知成员,每日收集情报后汇总发送给有关人员等等。
随着互联网办公软件成熟,群组功能在企业内应用也更加广泛,企业微信和钉钉是国内2个最主流的企业办公服务软件。
它们都提供了机器人功能,可以自动通知消息到所在群组成员,比邮件及时,也更灵活。
所以我们可以把这类应用归为自动通知场景:
自动发送邮件:如定时周报或条件触发后自动邮件通知。
归档整理邮件:自动下载邮件,提取内容保存,如附件。
机器人通知:钉钉和企业微信群内自动通知相关成员。
发送邮件
用Python发邮件主要分3步:
构造邮件内容
账号登陆授权
发送邮件消息
其中有几个注意点:
登陆密码是授权码,而非邮箱Web版客户端的登陆密码。
有些服务商会选用自定义端口并要求用SSL加密后发邮件。
不同服务商在协议实现支持上可能会有不同,有些服务商会禁止通过协议访问邮箱数据。此外用非官方客户端访问时,会出现'system busy'等提示,估计资源分配不如官方版本。
真正发送者和目标在
sendmail()
方法中指定,邮件中的From
和To
只是内容一部分。
尤其是最后一点,早先成了不少电子邮件欺诈者的帮凶,理论上的“发件人”你可以写任何名字。
比如下面标示的邮箱地址都是“假的”。
目前一些服务商会对邮件内容做敏感信息过滤。
发送纯文本邮件
发送HTML邮件
发送带附件邮件
收邮件
Python收邮件可以选择使用POP3
或IMAP
两种协议。
poplib
:用POP3
协议收取MIME内容。smtplib
:用IMAP
获取邮箱内容,也可以同步数据给邮箱,数据可以双向传递。
从邮箱收到数据后,可以用email
模块按邮件标准格式解析。
用POP3
自动下载邮件
用IMAP
自动下载邮件
用IMAP
协议同步信息到邮箱
机器人应用
这里所谓的机器人,是指钉钉、企业微信中参与聊天的机器人账号。
其本质是一个restful
接口的账号,通过接口控制账号行为。
目前这类机器人主要应用场景有:
快速传达信息到社群内,如技术运维、运营分析、情报获取等信息。
打造自动社群体验流程,如自助客服、新业务体验等。
在钉钉和企业微信中,一般由管理员创建机器人:
钉钉群和企业微信内部群支持机器人主动发送信息。
企业微信外部群机器人只能被动回应关键词,不能主动发信息。
下面主要介绍钉钉和企业微信内部群的机器人使用方式。
创建机器人流程:
创建钉钉/企业微信内部群。
在群设置中,添加机器人。
记录下调用机器人的web地址。
调用机器人的接口需要发送HTTP请求,常用的Python模块如urllib
、requests
。
requests
模块安装:pip install requests
。
发送消息流程就2步:
构建消息内容数据
使用
requests
发送post
请求。
注意点:
为HTTP请求增加头部信息,指明请求内容为
json
数据。提交请求时,需要用
json.dumps()
方法对数据编码。机器人发送消息有频率限制:20条/分钟
钉钉机器人使用
企业微信内部群机器人使用
总结
本文主要介绍了用Python收发邮件的主要场景,以及钉钉和企业微信机器人的基本使用方法。
在现实的互联网运营中,我们经常会发现一些非官方支持的机器人,如微信机器人、QQ机器人等。
这些都是通过破解官方客户端协议实现,属于非正常使用,受到官方打击和封禁。
哪里有流量红利,哪里就会有更多技术创新,虽然有时创新的技术非官方所愿。
目前,钉钉的功能更丰富,但企业微信背靠10亿级月活的微信,也正在发力。
你认为哪个更有潜力呢?
欢迎入群交流,前100名免费。
版权声明: 本文为 InfoQ 作者【程一初】的原创文章。
原文链接:【http://xie.infoq.cn/article/ea9b65c452b8c5704488ff86a】。文章转载请联系作者。
评论