Python的功能十分强大,有很多令人意想不到的功能,学会python可以大大提高你的工作效率,帮助你解决人工重劳动。 本期将继续向大家介绍python中的实用技能,本期的主题是:用Python批量发送带有正文和附件的邮件。让我们一起往下看,感受Python的奇妙吧!

首先通过设置获取POP3/SMTP服务授权码。




python imaplib 读取邮件正文 python读取邮件附件_imap读取邮箱和附件


python imaplib 读取邮件正文 python读取邮件附件_java邮件发送附件_02


python imaplib 读取邮件正文 python读取邮件附件_python 保存byte_03


python imaplib 读取邮件正文 python读取邮件附件_java 代码发送邮件添加附件_04


python imaplib 读取邮件正文 python读取邮件附件_java邮件发送附件_05


代码如下:

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)

邮件发送结果:


python imaplib 读取邮件正文 python读取邮件附件_java 代码发送邮件添加附件_06