继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python进阶量化交易专栏场外篇28-还用盯盘吗?远程提醒你下单

袁霄
关注TA
已关注
手记 86
粉丝 1.8万
获赞 1569

欢迎大家订阅《教你用 Python 进阶量化交易》专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下:

我们用量化交易的目的就是让程序全自动地去跑策略,这样就可以解放电脑屏幕前的你。当产生交易信号的时候或者出现异常的时候,得需要通知到相关人员才行,也就是说要实现一种远程提醒的功能,解决方案有用微信、短信、邮件之类的方式,这里我们介绍下邮箱这种相对有效的方式来提醒。

发送邮件和核心是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位授权码进行验证即可。

图片描述

图片描述

这样一来邮件就发送成功了,测试了下已经得到下单提醒的邮件了!!!手机邮箱也一样可以收到哦!
图片描述
关于以上内容更多的探讨欢迎大家加入专栏交流群。更多的量化交易内容欢迎大家订阅专栏阅读!!

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP