今天看啥  ›  专栏  ›  杨卫祥_老杨说币

如何用Python收取邮件,并筛选币安的公告

杨卫祥_老杨说币  · 简书  ·  · 2020-05-14 23:49

文章预览

最近币安的公告页面( 链接 )升级,无法通过爬虫的方式获取最新公告,包括非小号和MyToken也捕捉不到币安的公告,自己尝试了各种方法也没成功。

币安的公告经常会发出一些活动或者上币之类,比如某种币一旦有类似消息,很快会爆拉超过10个点,第一时间获得公告就至关重要。

后来突发其想,币安公告页面提供关注并邮件订阅功能,如下图,点击关注,需要登陆自己的币安账户,登陆成功之后右上角会显示自己的邮箱前缀,再点击关注新文章,这样有公告时会第一时间收到邮件,币安建议关注两个组:“最新公告”和“币币交易”。

接下来的问题就是如何用Python收到邮件,在网了寻找了很多,发现太多已经失效不能用了。

后来在这里https://www.liaoxuefeng.com/wiki/1016959663602400/1017800447489504找到一篇还能运行的。感谢这篇文章的作者廖雪峰,这篇文章阅读量87万多了,我直接在他的代码上更改的。

我要做的就是监控最新的邮件,然后用关键字binance去筛选收件人,如果是币安的邮件,就发钉钉提醒我。

测试了几个邮箱结果:

网易 ,经常出现登陆不上的情况 b'-ERR Unable to log on’,最后放弃

Gmail :首先需要开启'允许安全性较低的应用'https://myaccount.google.com/lesssecureapps。其次登陆后会的邮件提示'登录尝试已被阻止',这个要同意,证明是本人。安全性要求非常高,最后还是放弃了。

搜狐:发现其邮件索引是倒序,并且还有一个欢迎的新邮件,没调试好

QQ邮箱最好用,最先就选择了它。

使用的库是poplib


# 邮箱QQ 需要开启POP服务,并申请授权码,比使用密码更安全

pop3_server ='pop.qq.com'

username ='XXX@qq.com'

password ='XXX'  # 授权码

# 连接到POP3服务器:

server = poplib.POP3(pop3_server)

# 身份认证:

server.user(username)

server.pass_(password)

# list()返回所有邮件的编号:

resp, mails, octets = server.list()

# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]

num =3  # 监控几个邮件

text_or_not =1  # 是否需要查看正文,这个设置个开关,有时候正文内容太多,显示不方便

notice_List = []# 内容列表

Subject_List = []# 主题列表

From_List = []# 发件人列表

# 最新一封邮件, 注意索引号从1开始, 最大的是最新的邮件

i =0

index =len(mails)

while i < num:# 获取多个邮件

resp, lines, octets = server.retr(index - i)

# 可以获得整个邮件的原始文本:

msg_content =b'\r\n'.join(lines).decode('utf-8')#

# 解析出邮件:这个是库的内容,把邮件内容解析为Message对象

msg = Parser().parsestr(msg_content)

handle_info(msg)

Subject_List.append(Subject)

From_List.append(From)

i = i +1

print('邮件主题', Subject_List)

print('发件人是', From_List)

通过以上程序就可以获得主题和发件人,接下来根据需要筛选就行了。

这里出现一个小插曲值得提下,原来处理邮件的函数名叫print_info(), 但我在输入 print(content)时,因为Pycharm在输入print回车会带出来print_info(content),导致耽误大半天时间找不出问题。所以print_info这种名字不能用,改成handle_info了

另外时间间隔我测试几天后,发现设置成至少设置成14秒,否则QQ邮箱会当成攻击关闭链接,不过延时还是不小。

while True:

try:

resp, mails, octets = server.list()

index =len(mails)

resp, lines, octets = server.retr(index)

msg_content =b'\r\n'.join(lines).decode('utf-8')

msg = Parser().parsestr(msg_content)

handle_info(msg)

# 新邮件提醒

if 1:

if Subjectnot in Subject_List:

content ='新邮件' +'\n' + Subject

print(content)

print('邮件正文', text_content)

send_msg1 = send_dingding_msg1(content)

print(send_msg1)

# break

# 币安新邮件提醒

if 1:

if 'binance' in Fromand (Subjectnot in Subject_List):

print('币安新公告', Subject)

content ='币安新公告' +'\n' + Subject

print('邮件正文', text_content)

send_msg1 = send_dingding_msg1(content)

print(send_msg1)

time.sleep(14)

except Exception as err:

time.sleep(2)

print('查询错误', err)

完整代码放在了Github上了: https://github.com/Yang-Weixiang/Python/blob/master/Mail/Fetch-Email-and-Binance-Latest-Announcements

………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览