Python使用smtplib发送纯文本、HTML及带附件邮件详解
本文详细介绍如何利用Python的smtplib库发送不同格式的邮件。内容涵盖发送纯文本邮件、包含HTML内容的邮件、带有附件的邮件以及正文嵌入图片的邮件。通过具体代码示例,解析MIMEText、MIMEMultipart及MIMEImage等模块的使用,帮助开发者掌握邮件发送的核心技术与参数配置。
Python发送邮件概述
本文主要讲解如何利用Python的smtplib模块发送不同格式的电子邮件。文中提供了详细的示例代码,旨在为读者的学习或工作提供具有参考价值的指导。
邮箱服务器信息准备
在开始之前,了解常用邮箱的SMTP和POP3域名及其对应的端口号是必要的准备工作。
发送纯文本邮件
发送普通文本内容的邮件是基础操作。核心在于使用MIMEText定义邮件正文,并设置格式为纯文本(plain)及编码(如utf-8)。
纯文本发送代码示例
import smtplib
from email.header import Header
from email.mime.text import MIMEText
# smtp服务器信息
smtp_server = 'smtp.163.com'
server_port = 465
# 发送方信息
sender = '发送的邮箱地址'
password = '发送邮箱的smtp授权码'
# 收件人地址,列表可发给多人
receivers = ['123456@qq.com', '3123123@qq.com', '12312@qq.com']
# 邮箱的正文内容,参数分别为内容,格式(plain 为纯文本),编码
msg = MIMEText('Here is content.', 'plain', 'utf-8')
# 邮件头信息
msg['From'] = Header(sender) # 发件人
msg['To'] = Header(', '.join(receivers)) # 发到哪里,参数为字符串
msg['Subject'] = Header('This is subject') # 邮件标题
# 发送邮件的操作
try:
server = smtplib.SMTP_SSL() # SSL加密传输
server.connect(smtp_server, server_port) # 连接smtp,服务器和端口
server.login(sender, password) # 登录发信邮箱
server.sendmail(sender, receivers, msg.as_string()) # 发送邮件
server.quit() # 关闭服务器
print('发送成功')
except smtplib.SMTPException:
print('发送失败')
发送HTML格式邮件
若需发送HTML格式的邮件,关键在于将MIMEText中的_subtype参数设置为html。这使得邮件正文可以包含HTML标签,从而呈现富文本效果。
Python发送HTML格式邮件与纯文本邮件的主要区别,即在于MIMEText构造函数中_subtype参数的取值不同,前者为html,后者为plain。
发送带附件邮件
发送带有附件的邮件时,首先需要实例化MIMEMultipart对象。接着,通过构造附件对象(如使用MIMEApplication)并添加到邮件实例中。若存在多个附件,可依次构造并添加,最后通过smtplib的sendmail方法完成发送。
具体操作中,需实例化MIMEMultipart,先附加正文内容,再逐个添加附件。每个附件需指定Content-Disposition以定义文件名,确保接收方能正确识别附件名称。
带附件发送代码示例
import smtplib
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# smtp服务器信息
smtp_server = 'smtp.163.com'
server_port = 465
# 发送方信息
sender = '发送的邮箱地址'
password = '发送邮箱的smtp授权码'
# 收件人地址,列表可发给多人
receivers = ['969831239@qq.com', '124123989@qq.com']
# 实例化,先添加正文内容
msg = MIMEMultipart()
msg.attach(MIMEText('This is content.', 'plain', 'utf-8'))
# 添加附件1
att1 = MIMEApplication(open('tips.py', 'rb').read(), 'utf-8')
att1['Content-Disposition'] = 'attachment; filename="down.py"' # filename随便起,是接收到的附件显示名称
# att1["Content-Type"] = 'application/octet-stream' Content-Type默认为application/octet-stream
msg.attach(att1)
# 添加附件2
att2 = MIMEApplication(open('source.jpg', 'rb').read(), 'utf-8')
att2['Content-Disposition'] = 'attachment; filename="girl.jpg"'
msg.attach(att2)
# 邮件头信息
msg['From'] = Header(sender) # 发件人
msg['To'] = Header(', '.join(receivers)) # 发到哪里,参数为字符串
msg['Subject'] = Header('This is subject') # 邮件标题
# 发送邮件的操作
try:
server = smtplib.SMTP_SSL() # SSL加密传输
server.connect(smtp_server, server_port) # 连接smtp,服务器和端口
server.login(sender, password) # 登录发信邮箱
server.sendmail(sender, receivers, msg.as_string()) # 发送邮件
server.quit() # 关闭服务器
print('发送成功')
except smtplib.SMTPException:
print('发送失败')
发送正文嵌入图片邮件
发送正文中嵌入图片的邮件,需利用HTML格式的img标签,并通过src属性指定图片的cid(Content-ID)。同时,图片内容需通过MIMEImage上传,并在头部指定对应的Content-ID,以建立HTML与图片的关联。
实现正文带图片的关键步骤是:在HTML正文中使用<img src="cid:xxx" />引用图片,其中xxx需与MIMEImage对象中通过add_header('Content-ID', 'xxx')设置的ID保持一致,从而确保图片能正确显示在邮件正文中。
嵌入图片发送代码示例
import smtplib
from email.header import Header
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# smtp服务器信息
smtp_server = 'smtp.qq.com'
server_port = 465
# 发送方信息
sender = '发送的邮箱地址'
password = '发送邮箱的smtp授权码'
# 收件人地址,列表可发给多人
receivers = ['dsaisu@163.com', '76das23021@qq.com', '253das58570@qq.com']
# 实例化,添加正文内容,html格式,<img>标签 指定cid属性的值等于上传图片中Content-ID的值
msg = MIMEMultipart()
msg.attach(MIMEText('<img src="cid:demo" />', 'html', 'utf-8')) # 与下面的Content-ID的值相同
# 添加图片
img = MIMEImage(open('source.jpg', 'rb').read())
img.add_header('Content-ID', 'demo') # 与上面的cid相同
msg.attach(img)
# 邮件头信息
msg['From'] = Header(sender) # 发件人
msg['To'] = Header(', '.join(receivers)) # 发到哪里,参数为字符串
msg['Subject'] = Header('This is subject') # 邮件标题
# 发送邮件的操作
try:
server = smtplib.SMTP_SSL() # SSL加密传输
server.connect(smtp_server, server_port) # 连接smtp,服务器和端口
server.login(sender, password) # 登录发信邮箱
server.sendmail(sender, receivers, msg.as_string()) # 发送邮件
server.quit() # 关闭服务器
print('发送成功')
except smtplib.SMTPException:
print('发送失败')
以上内容涵盖了Python使用smtplib发送各类格式邮件的主要方法,希望能为读者提供有益的帮助。欢迎持续关注以获取更多技术支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













