说明:当爬虫在运行过程中遇到异常或则服务器遇到问题,可以通过Email及时向目标邮件发送报告
from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr,formataddr import smtplib class SendEmailFromSpider(): """默认使用smtp服务""" def __init__(self,from_addr,to_addr,password): self.from_addr = from_addr # 发送邮件的地址 self.to_addr = to_addr # 接受邮件的地址 self.password = password self.smtp_server = 'smtp.qq.com' # smtp_server为smtp服务器地址 def format_addr_(self,s): name,addr = parseaddr(s) # 将传入的s,如"一号爬虫<{}>"解析为name='一号安排爬虫',addr={} return formataddr(pair=(Header(s=name,charset='utf-8').encode(),addr),charset='utf-8') def make_message(self,from_addr,to_addr): """ 构造MIMEText对象时需要3个参数: _text:表示邮件的正文 _subtype:表示传入文本的类型,常有的有plain和html _charset:编码 """ msg = MIMEText(_text="hello world",_subtype='plain',_charset='utf-8') # msg['From'] = Header(s="一号爬虫",charset='utf-8').encode() # 这样写会使用代发 # msg['To'] = Header(s='管理员',charset='utf-8').encode() msg['From'] = self.format_addr_('一号爬虫<{}>'.format(from_addr)) msg['To'] = self.format_addr_('管理员<{}>'.format(to_addr)) msg['Subject'] = Header(s='一号爬虫的运行状态',charset='utf-8').encode() return msg def send_message(self,message): server = smtplib.SMTP(host=self.smtp_server,port=25) # 连接到smtp服务器 server.login(user=self.from_addr,password=self.password) # 登录 server.sendmail(from_addr=self.from_addr,to_addrs=self.to_addr,msg=message.as_string()) server.quit() def run(self): message = self.make_message(from_addr=self.from_addr,to_addr=self.to_addr) self.send_message(message=message) if __name__=="__main__": from_addr = "xxxxxx@qq.com" password = "xxxxxxx" # 密码为对第三方客户端的授权码 to_addr = "xxxxx@gmail.com" obj = SendEmailFromSpider(from_addr=from_addr,to_addr=to_addr,password=password) obj.run()