Python有两个内置库:smtplib和email,可以实现邮件功能,无需下载,直接import导入。
- smtplib库负责发送邮件
- Email库负责构造邮件格式和内容
邮件发送需要遵守SMTP协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
实验代码
1 #Part 1:导入相关的库和方法 2 #导入两个内置库 3 import smtplib 4 import email 5 #负责构造文本 6 from email.mime.text import MIMEText 7 #负责构造图片 8 from email.mime.image import MIMEImage 9 #负责将多个对象集合起来 10 from email.mime.multipart import MIMEMultipart 11 from email.header import Header 12 13 #Part 2:设置邮箱域名,发件人邮箱,邮箱授权码,收件人邮箱 14 #SMTP服务器,这里使用163邮箱 15 mail_host="smtp.163.com" 16 #发件人邮箱 17 mail_sender="**********@163.com" 18 #邮箱授权码。各种邮箱的授权码皆可自行获得 19 mail_license="********" 20 mail_receivers=["**********@gmail.com"] 21 22 #Part 3:构建MIMEMultipart对象代表邮件本身,可以往里面添加文本、图片、附件等 23 mm=MIMEMultipart('related') 24 25 #Part 4:设置邮件头部内容 26 #邮件主题 27 subject_content="python邮件测试" 28 #设置发送者,严格遵守格式 29 mm["From"]="sender_name<********@163.com>" 30 #设置接收者,严格遵守格式 31 mm["To"]="receiver_name<*********@gmail.com>" 32 #设置邮件主题 33 mm["Subject"]=Header(subject_content,'utf-8') 34 35 #Part 5:添加正文文本 36 # 邮件正文内容 37 body_content = "你好,这是一个测试邮件!" 38 # 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式 39 message_text = MIMEText(body_content,"plain","utf-8") 40 # 向MIMEMultipart对象中添加文本对象 41 mm.attach(message_text) 42 43 #Part 6:添加图片 44 # 二进制读取图片 45 image_data = open('a.jpg','rb') 46 # 设置读取获取的二进制数据 47 message_image = MIMEImage(image_data.read()) 48 # 关闭刚才打开的文件 49 image_data.close() 50 # 添加图片文件到邮件信息当中去 51 mm.attach(message_image) 52 53 #Part 7:添加附件 54 # 构造附件 55 atta = MIMEText(open('sample.xlsx', 'rb').read(), 'base64', 'utf-8') 56 # 设置附件信息 57 atta["Content-Disposition"] = 'attachment; filename="sample.xlsx"' 58 # 添加附件到邮件信息当中去 59 mm.attach(atta) 60 61 #Part 8:发送邮件 62 # 创建SMTP对象 63 stp = smtplib.SMTP() 64 # 设置发件人邮箱的域名和端口,端口地址为25 65 stp.connect(mail_host, 25) 66 # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息 67 stp.set_debuglevel(1) 68 # 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码 69 stp.login(mail_sender,mail_license) 70 # 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str 71 stp.sendmail(mail_sender, mail_receivers, mm.as_string()) 72 print("邮件发送成功") 73 # 关闭SMTP对象 74 stp.quit()
遇到的问题:
smtp出现(500, b'Error: bad syntax')
解决办法:
https://blog.csdn.net/weixin_38428827/article/details/104223207
运行成功: