1.需要调用的Python模块
smtplib
是关于 SMTP(简单邮件传输协议)的操作模块,在发送邮件的过程中起到服务器之间互相通信的作用。
简单来说,即服务器之间通信的信息,包括信息头、信息主体等等。
举个简单的例子,当你登录邮箱,写好邮件后点击发送,这部分是由 SMTP 接管;而写邮件、添加附件是由 email 模块控制。
2.打开邮箱的SMTP功能
在使用脚本发邮件之前,我们需要打开自己邮箱的 SMTP 功能,各家邮箱的设置方法就不一
3.代码
脚本分为三个步骤:
另外在处理文本时,我们需要使用 MIMEText 类。
1 import smtplib 2 from email.mime.text import MIMEText 3 #设置服务器所需信息 4 #邮箱服务器地址(举例QQ邮箱) 5 mail_host = ‘smtp.qq.com‘ 6 #用户名 7 mail_user = ‘149*****25‘ 8 #密码(QQ邮箱为授权码) 9 mail_pass = ‘7******x‘ 10 #邮件发送方邮箱地址 11 sender = ‘149*****25@qq.com‘ 12 #邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发 13 receivers = [‘20*****39@qq.com‘] 14 15 #设置email信息 16 #邮件内容设置 17 message = MIMEText(‘此处为正文‘,‘plain‘,‘utf-8‘) 18 #邮件主题 19 message[‘Subject‘] = ‘此处为标题‘ 20 #发送方信息 21 message[‘From‘] = sender 22 #接受方信息 23 message[‘To‘] = receivers[0] 24 25 #登录并发送邮件 26 try: 27 smtpObj = smtplib.SMTP() 28 #连接到服务器 29 smtpObj.connect(mail_host,25) 30 #登录到服务器 31 smtpObj.login(mail_user,mail_pass) 32 #发送 33 smtpObj.sendmail( 34 sender,receivers,message.as_string()) 35 #退出 36 smtpObj.quit() 37 print(‘完成‘) 38 except smtplib.SMTPException as e: 39 print(‘error‘,e) #打印错误
QQ 邮箱需要 SSL 认证,所以 SMTP 已经不能满足要求,而需要SMTP_SSL,解决办法为:
1 #启动 2 smtpObj = smtplib.SMTP() 3 #连接到服务器 4 smtpObj.connect(mail_host,25) 5 #######替换为######## 6 smtpObj = smtplib.SMTP_SSL(mail_host)
发送内容以 HTML 格式,并且带有图片和文本文件的邮件。
处理多种形态的邮件主体我们需要 MIMEMultipart 类,而处理图片需要 MIMEImage 类。
1 import smtplib 2 from email.mime.text import MIMEText 3 from email.mime.multipart import MIMEMultipart 4 from email.mime.image import MIMEImage 5 6 #设置登录及服务器信息 7 mail_host = ‘smtp.163.com‘ 8 mail_user = ‘159*****02‘ 9 mail_pass = ‘7******x‘ 10 sender = ‘159*****02@163.com‘ 11 receivers = [‘7******0@qq.com‘] 12 13 #设置eamil信息 14 #添加一个MIMEmultipart类,处理正文及附件 15 message = MIMEMultipart() 16 message[‘From‘] = sender 17 message[‘To‘] = receivers[0] 18 message[‘Subject‘] = ‘title‘ 19 #推荐使用html格式的正文内容,这样比较灵活,可以附加图片地址,调整格式等 20 with open(‘abc.html‘,‘r‘) as f: 21 content = f.read() 22 #设置html格式参数 23 part1 = MIMEText(content,‘html‘,‘utf-8‘) 24 #添加一个txt文本附件 25 with open(‘abc.txt‘,‘r‘)as h: 26 content2 = h.read() 27 #设置txt参数 28 part2 = MIMEText(content2,‘plain‘,‘utf-8‘) 29 #附件设置内容类型,方便起见,设置为二进制流 30 part2[‘Content-Type‘] = ‘application/octet-stream‘ 31 #设置附件头,添加文件名 32 part2[‘Content-Disposition‘] = ‘attachment;filename="abc.txt"‘ 33 #添加照片附件 34 with open(‘1.png‘,‘rb‘)as fp: 35 picture = MIMEImage(fp.read()) 36 #与txt文件设置相似 37 picture[‘Content-Type‘] = ‘application/octet-stream‘ 38 picture[‘Content-Disposition‘] = ‘attachment;filename="1.png"‘ 39 #将内容附加到邮件主体中 40 message.attach(part1) 41 message.attach(part2) 42 message.attach(picture) 43 44 #登录并发送 45 try: 46 smtpObj = smtplib.SMTP() 47 smtpObj.connect(mail_host,25) 48 smtpObj.login(mail_user,mail_pass) 49 smtpObj.sendmail( 50 sender,receivers,message.as_string()) 51 print(‘success‘) 52 smtpObj.quit() 53 except smtplib.SMTPException as e: 54 print(‘error‘,e)
原文:https://www.cnblogs.com/OoGKoO/p/14547348.html