多语言展示
当前在线:1628今日阅读:126今日分享:42

如何使用Python发送邮件?

最近经常使用Python进行一些网站的数据爬取,由于爬取的是一些轻量级静态网站,并没有采取Scrapy或PySpider框架的解决方案。而是采用Requests + Xpath + re + lxml进行解析的技术路线进行爬取,在爬取过程中经常遇到网络或服务器异常。作为一个Coder自然不愿意放弃半个小时甚至若干小时一直等在电脑旁边,等待异常出现及时处理或者等到爬取结束。基于此,我接下来向大家演示如何使用Python在爬虫出现异常时及时用Email向自己报告,而不用苦苦守候在电脑旁边。
工具/原料

Python3.6

方法/步骤
1

首先在进入正题之前,我们需要对一些基本内容有所了解:常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。Python内置对SMTP的支持,该协议支持发送纯文本邮件、HTML邮件以及带附件的邮件,Python的smtplib,email模块都支持该协议。下面我们开始进入正题:

2

第一步,首先你要准备两个邮箱帐号,一个是常用的(接收端),另一个可以注册网易163邮箱或者foxmail邮箱也可(发送端),本次我使用两个QQ邮箱进行演示。首先在邮箱的设置-账户中开启SMTP功能

3

第二步,点击生成授权码,按照弹出窗口的提示发送短信,发送后单击我已发送按钮。将生成的授权码复制下来以备接下来使用。

4

第三步,在顺利完成上述步骤后,我们来编辑代码:from email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr,formataddrimport smtplibdef _format_addr(s):        name,addr = parseaddr(s)        return formataddr((Header(name,'utf-8').encode(),addr))#发件人地址from_addr = '10******10@qq.com'#密码刚才复制的邮箱的授权码password = 'u*******************g'#收件人地址to_addr =  '10********28@qq.com'#邮箱服务器地址smtp_server = 'smtp.qq.com'#设置邮件信息msg = MIMEText('Python爬虫运行异常,异常信息为遇到HTTP 403','plain','utf-8')msg['From'] = _format_addr('Python爬虫一号<%s>'%from_addr)msg['To'] = _format_addr('管理员<%s>'%to_addr)msg['Subject'] = Header('一号爬虫运行异常.','utf-8').encode()#发送邮件server = smtplib.SMTP_SSL(smtp_server,465)#打印出和SMTP服务器交互的所有信息server.set_debuglevel(1)#登录SMTP服务器server.login(from_addr,password)#sendmail():发送邮件,由于可以一次发给多个人,所以传入一个list邮件正文是一个str,as_string()把MIMEText对象变成str。server.sendmail(from_addr,to_addr,msg.as_string())server.quit()print('邮件发送成功!')

5

第五步,登录接收端邮箱查看是否发送成功:

6

如果能成功收到邮件的话就说明大功告成了,下次在进行爬取工作时就不用在眼巴巴的盯着了。

注意事项
1

Python3.6运行通过,2.x版本可能需要进行调整。

3

你的支持就是对我最大的鼓励,如果本经验对你有所帮助,请点击左下角的投票按钮,为我投票。谢谢!

推荐信息