我们用量化交易的目的就是让程序全自动地去跑策略,这样就可以解放电脑屏幕前的你。当产生交易信号的时候或者出现异常的时候,得需要通知到相关人员才行,也就是说要实现一种远程提醒的功能,解决方案有用微信、短信、邮件之类的方式,这里我们介绍下邮箱这种相对有效的方式来提醒。
发送邮件和核心是SMTP(Simple Mail Transfer Protocol)协议,它是一组用于由源地址到目的地址的邮件传输规则。
Python真的是什么都能做,它对SMTP进行了简单的封装,只需用到两个模块,就可以轻松实现发送纯文本邮件、HTML邮件以及带附件的邮件。
哪两个模块呢?Python内置的email模块负责构建邮件,另一个smtplib模块负责发送邮件。
常规的流程,先把涉及到的模块全部导入进来,如下所示:
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
首先用MIMEText()构造一个最简单的纯文本邮件,其中第一个参数是邮件正文,第二个参数是内容的类型,比如'plain'表示纯文本邮件,'html'表示HTML邮件。
创建的邮件对象中,要添加From、To和Subject这些属性,否则就不是一封完整的邮件,比如邮件没有主题,发件人的名称为匿名,明明收到了邮件却提示不在收件人中。典型的例程如下所示:
# 发送纯文本格式的邮件
msg = MIMEText('order attention','plain','utf-8')
#发送邮箱地址
msg['From'] = ='发件人邮箱账号'
#收件箱地址
msg['To'] ='收件人邮箱账号'
#主题
msg['Subject'] = "主题"
再来说说负责发送邮件smtplib模块,主要是用smtplib.SMTP()类连接SMTP服务器,然后发送邮件。这个类有几个常用的方法.
set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息。login()方法用来登录SMTP服务器,sendmail()方法发邮件,可以传入一个列表一次发给多个人,邮件正文使用as_string()把MIMEText对象变成str。
典型例程如下所示:
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
这里的password是个比较容易混淆的地方。不是邮箱登陆的密码,而是授权码。
第三方客户端登录QQ邮箱时是需要授权码的,包括其他邮箱也都一样,比如126、163邮箱等等。授权码可以认为是一个专用密码,适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
如何设置呢?以QQ邮箱为例,我们在QQ邮件的帮助中心找到了方法。
在个人邮箱页面进入[设置] -> [帐户] 页面找到入口,然后把POP3/IMAP/SMTP这几个服务开启。
开启的时候有验证密保环节,需要发送短信,接着就获取到授权码,在第三方客户端的密码栏里面输入这16位授权码进行验证即可。
这样一来邮件就发送成功了,测试了下已经得到下单提醒的邮件了!!!手机邮箱也一样可以收到哦!
关于以上内容更多的探讨欢迎大家关注公众号【元宵大师带你用Python量化交易】!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。