scrapy两种发email邮件的方式带有附件(Excel表格附件)
查看文档https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/email.html#topics-email-settings可知有两种方式一种是smtplib,另一种是mailSender
一、使用mailSender
采坑点:attachs的参数问题,文档上写的需要的是元组,我这边一直报错,最后改为列表,成功运行。(u+"字符串",就是把中文转码,不然可能会报错)
源码:
today_date = datetime.date.today() settings = scrapy.settings.Settings({'MAIL_FROM': '[email protected]', 'MAIL_HOST': 'smtp.163.com', 'MAIL_PORT': '25', 'MAIL_USER': '[email protected]', 'MAIL_PASS': 'FVDYFCDKVXGTVKNA'}, priority='project') mailer = MailSender.from_settings(settings) attach_name = "中新经纬.xlsx" mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' file_object = open('中新经纬.xlsx', 'rb') mailer.send(to=['[email protected]'], subject=str(today_date)+u"新舆情资源文件: 中新经纬.xlsx;", body='', cc=['[email protected]'], attachs=[(attach_name, mimetype, file_object)], mimetype='text/plain')
二、使用smtplib
源码:
today_date = datetime.date.today(); HOST = "smtp.163.com" # PORT = "465" SUBJECT = str(today_date)+"新舆情资源文件: 中新经纬.xlsx;" FROM = "[email protected]" TO = "[email protected]" message = MIMEMultipart('related') # 一般如果数据是二进制的数据格式,在指定第二个参数的时候,都使用base64,一种数据传输格式。 # 如果文件名是中文的: # add_header()能够正常的显示中文; # message_docx1['Content-Disposition']是无法正常显示中文的。 # message_docx1['Content-Disposition'] = 'attachment;filename=测试.docx' message_docx1 = MIMEText(open('中新经纬.xlsx', 'rb').read(), 'base64', 'utf8') # filename发送文件,附件显示的名称 message_docx1.add_header('content-disposition', 'attachment', filename='中新经纬.xlsx') message.attach(message_docx1) message['From'] = FROM message['Subject'] = SUBJECT message['To'] = TO client = smtplib.SMTP_SSL(host=HOST) client.connect(host=HOST) print('result: ', client.login(FROM, 'FVDYFCDKVXGTVKNA')) print('发送结果:', client.sendmail(from_addr=FROM, to_addrs=[TO], msg=message.as_string()))