Python的功能十分强大,有很多令人意想不到的功能,学会python可以大大提高你的工作效率,帮助你解决人工重劳动。本期将继续向大家介绍python中的实用技能,本期的主题是:用Python批量发送带有正文和附件的邮件。让我们一起往下看,感受Python的奇妙吧!
首先通过设置获取POP3/SMTP服务授权码。
代码如下:
1 导入模块
注意,你的.py文件不能叫email.py会造成误认报错,可以是其他的名字。
# 导入smtplib模块,用于发送邮件。
# 官方文档:
https://docs.python.org/3/library/smtplib.html
import smtplib
# email模块用于创建文件内容
# 官方文档:https://docs.python.org/3/library/email.examples.html
#带多个部分的邮件
from email.mime.multipart import MIMEMultipart
# MIMEText用于在邮件内的放置文本内容
from email.mime.text import MIMEText
# MIMEImage用于在邮件内放置图片附件
from email.mime.image import MIMEImage
# MIMEApplication用于在邮件内放置附件内容
from email.mime.application import MIMEApplication
# Header用于构建邮件头
from email.header import Header
2 服务器设置
# 指定发件人邮箱
from_addr = 123@qq.com'
# 在这里放入你之前保存的授权码,如果忘了可以重新生成。
password = 'xxxxxxxx'
# 指定收件人邮箱,有多少,放多少。
to_addrs = ['111@qq.com','222@qq.com','333@qq.com','444@qq.com','555@qq.com','666@qq.com','777@qq.com','888@qq.com','999@qq.com','000@qq.com']
# 指定发送服务器为腾讯邮箱服务器
smtp_server = 'smtp.qq.com'
# 创建邮件发送对象
server = smtplib.SMTP_SSL()
# 连接服务器
server.connect(smtp_server,465)
# 登录发送邮件的邮箱
server.login(from_addr,password)
3 加入正文文本
# 创建一个多部分的邮件对象
# 这一步很重要,后面的文本,图片和pdf都是不断添加到msg中的。
msg = MIMEMultipart('alternative')
# 在邮件中加入文本内容
contents = '''你好,世界!
我来了!
我又走了!
我没有带走那片云彩!'''
# plain是字体,utf-8是编码方式
msgtext = MIMEText(contents,'plain','utf-8')
# 将文本内容加载到msg中
msg.attach(msgtext)
4 加入图片附件
# 将一张图片放入邮件附件中
img_path = r"C:UsersadminDesktop运营python发送邮件LOGO.png"
img_name = 'Logo.png'
with open(img_path,'rb') as fp:
#读取图片赋值一个图片对象
msgImage = MIMEImage(fp.read())
#为图片对象拓展标题字段和值
msgImage.add_header('Content-Disposition', 'attachment', filename=img_name)
#将图像添加到msg
msg.attach(msgImage)
5 加入PDF附件
# 将一个pdf附件放入邮件中
filepath = r"C:UsersadminDesktop运营python发送邮件yte-of-python-chinese-edition.pdf"
filename = "byte-of-python-chinese-edition.pdf"
with open(filepath,'rb') as f:
#读取pdf文件赋值一个对象
attachfile = MIMEApplication(f.read())
#为对象拓展标题字段和值
attachfile.add_header('Content-Disposition', 'attachment', filename=filename)
#将pdf添加到msg
msg.attach(attachfile)
6 发送邮件
# 邮件标题
msg['Subject'] = Header('哈哈哈,这个是标题!')
# 标明邮件发送人名称
msg['From'] = Header('神秘人')
# 标明收件人
msg['To'] = Header(','.join(to_addrs))
# 指定邮件的发送邮箱,接收邮箱,发送内容
server.sendmail(from_addr,to_addrs, msg.as_string())
# 结束邮件发送,关闭服务器
server.quit()
7 常见报错
# 1:如果你的Python版本是3.7,很可能发生这种报错
ValueError: server_hostname cannot be an empty string or start with a leading dot.
# 把这两行代码改掉
# server = smtplib.SMTP_SSL()
# server.connect(smtp_server,465)
# 2:
# smtplib.SMTPException: No suitable authentication method found
# 改掉port参数,并去掉_SSL
# server = smtplib.SMTP()
# server.connect(smtp_server,25)
邮件发送结果: