scrapy两种发email邮件的方式带有附件(Excel表格附件)

查看文档https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/email.html#topics-email-settings可知有两种方式一种是smtplib,另一种是mailSender

一、使用mailSender

采坑点:attachs的参数问题,文档上写的需要的是元组,我这边一直报错,最后改为列表,成功运行。(u+"字符串",就是把中文转码,不然可能会报错)

scrapy两种发email邮件的方式带有附件(Excel表格附件)

源码:

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

scrapy两种发email邮件的方式带有附件(Excel表格附件)

源码:

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()))