在当今的信息化时代,邮件依然是工作中不可或缺的一部分。Python 的
smtplib
模块为我们提供了一个简单方便的途径来实现邮件的自动发送,今天我们就来聊一聊如何使用 Python 发送邮件,具体包括文本邮件、HTML 邮件、带附件邮件等。
1. SMTP 协议概述
SMTP(Simple Mail Transfer Protocol)是一个简单的邮件传输协议,它负责在源地址和目的地址之间传送邮件。通过 smtplib
,我们可以轻松地在 Python 中实现邮件发送的功能。
2. 基本设置与邮件发送
首先,我们需要导入 smtplib
并创建一个 SMTP 对象。以下是一个简单的 Python 发送邮件实例:
# 导入发送邮件所需的模块
import smtplib # 用于连接 SMTP 服务器和发送邮件
from email.mime.text import MIMEText # 用于创建邮件内容(文本格式)
from email.header import Header # 用于设置邮件头(发件人、收件人、主题等)
# 定义发件人和收件人邮箱
sender = 'your_email@example.com' # 这里填写你的发件人邮箱
receivers = ['receiver_email@example.com'] # 这里填写收件人邮箱,可以是一个或多个
# 创建邮件内容,MIMEText 用于表示邮件的正文部分
# 参数:'这是测试邮件内容' 是邮件正文,'plain' 表示纯文本格式,'utf-8' 是字符编码
message = MIMEText('这是测试邮件内容', 'plain', 'utf-8')
# 设置邮件头信息
message['From'] = Header("Python 博主", 'utf-8') # 设置发件人的显示名称
message['To'] = Header("收件人", 'utf-8') # 设置收件人的显示名称
message['Subject'] = Header('Python SMTP 邮件测试', 'utf-8') # 设置邮件的主题
# 连接到 SMTP 服务器并发送邮件
try:
# 连接到 SMTP 服务器
# smtp.example.com 是一个占位符,实际应用时需要填写邮件提供商的 SMTP 服务器地址
smtp_obj = smtplib.SMTP('smtp.example.com')
# 使用 sendmail 方法发送邮件
# 参数:发件人邮箱、收件人邮箱、邮件内容(message.as_string() 会将邮件对象转换为字符串格式)
smtp_obj.sendmail(sender, receivers, message.as_string())
# 如果邮件发送成功,打印邮件发送成功的提示
print("邮件发送成功")
except smtplib.SMTPException:
# 如果在发送邮件过程中发生异常,捕获异常并打印错误信息
print("邮件发送失败")
在这个实例中,我们通过 MIMEText
来创建邮件内容,并设置了发件人、收件人和邮件主题。然后,如果你本机安装sendmail,使用 sendmail()
方法将邮件发送出去。
3. 使用第三方 SMTP 服务
如果你没有本地的 SMTP 服务,也可以使用第三方服务如 QQ 邮箱、Gmail 等。以下是如何使用 QQ 邮箱 SMTP 服务发送邮件的示例:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
# 发件人邮箱和授权码
my_sender = 'your_email@qq.com' # 替换成你的 QQ 邮箱地址
my_pass = 'your_auth_code' # 替换成你的 QQ 邮箱授权码(不是密码)
my_user = 'receiver_email@example.com' # 替换成收件人的邮箱地址
def send_email():
try:
# 创建邮件内容
msg = MIMEText('这是邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["Sender", my_sender]) # 发件人
msg['To'] = formataddr(["Receiver", my_user]) # 收件人
msg['Subject'] = "Python 邮件发送测试" # 邮件标题
# 连接 SMTP 服务器并发送邮件
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(my_sender, my_pass) # 登录邮箱
server.sendmail(my_sender, [my_user], msg.as_string()) # 发送邮件
server.quit() # 退出 SMTP 服务器
print("邮件发送成功")
except Exception as e:
print("邮件发送失败:", e)
# 调用发送邮件的函数
send_email()
在这个例子中,我们通过 formataddr()
来设置发件人和收件人信息,并使用 SMTP_SSL
连接到 QQ 邮箱的 SMTP 服务器(smtp.qq.com
)进行邮件发送。
mypass中不是密码,请在邮箱中需要将SMTP服务打开,填写授权码!!!
如果出现 smtplib.SMTPAuthenticationError
,可能是你的授权码有误,或者需要确保已经启用 SMTP 服务
如果网络问题导致无法连接服务器,可以检查你的防火墙设置或网络环境。
已发送成功!!!
发送成功后,查看我们的收件箱(如果没有请查看垃圾箱),就可以查看到邮件信息。
注意内容:
(如有需求请根据具体情况更改,可以百度具体服务地址与端口号!!!)
如果需要同时发送给多人,请参考
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender = 'your_email@qq.com'
my_pass = 'your_auth_code' # QQ 邮箱授权码
my_user = ['receiver1@example.com', 'receiver2@example.com', 'receiver3@example.com']
def send_email():
try:
msg = MIMEText('这是邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["Sender", my_sender])
msg['To'] = ", ".join(my_user) # 将多个收件人用逗号连接
msg['Subject'] = "Python 邮件发送测试"
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(my_sender, my_pass)
server.sendmail(my_sender, my_user, msg.as_string())
server.quit()
print("邮件发送成功")
except Exception as e:
print("邮件发送失败:", e)
send_email()
4. 发送 HTML 格式邮件
HTML 格式邮件使邮件内容更为丰富,支持文本、图片和链接等。我们只需要在 MIMEText
中将邮件内容的类型设置为 html
即可。如果你本机安装sendmail,以下是发送 HTML 邮件的代码示例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'your_email@example.com'
receivers = ['receiver_email@example.com']
html_content = """
<p>欢迎使用 Python 邮件发送功能!</p>
<p><a href="http://www.runoob.com">点击这里查看教程</a></p>
"""
message = MIMEText(html_content, 'html', 'utf-8')
message['From'] = Header("Python 博主", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
message['Subject'] = Header('Python HTML 邮件测试', 'utf-8')
try:
smtp_obj = smtplib.SMTP('smtp.example.com')
smtp_obj.sendmail(sender, receivers, message.as_string())
print("HTML 邮件发送成功")
except smtplib.SMTPException:
print("HTML 邮件发送失败")
在上面的代码中,我们将 message
的类型设置为 html
,并且邮件正文包含了一个链接。
5. 发送带附件的邮件
除了普通文本和 HTML 邮件外,有时候我们还需要发送带附件的邮件。我们可以使用 MIMEMultipart
来创建一个包含多个部分的邮件,附件部分可以通过 MIMEText
来处理。如果你本机安装sendmail,以下是带附件的邮件发送实例:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
sender = 'your_email@example.com'
receivers = ['receiver_email@example.com']
message = MIMEMultipart()
message['From'] = Header("Python 博主", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
message['Subject'] = Header('Python 带附件邮件测试', 'utf-8')
# 邮件正文内容
message.attach(MIMEText('这是带附件的邮件内容...', 'plain', 'utf-8'))
# 添加附件
attachment = MIMEText(open('example.txt', 'rb').read(), 'base64', 'utf-8')
attachment["Content-Type"] = 'application/octet-stream'
attachment["Content-Disposition"] = 'attachment; filename="example.txt"'
message.attach(attachment)
try:
smtp_obj = smtplib.SMTP('smtp.example.com')
smtp_obj.sendmail(sender, receivers, message.as_string())
print("带附件邮件发送成功")
except smtplib.SMTPException:
print("带附件邮件发送失败")
在这个实例中,我们通过 MIMEMultipart
创建邮件,使用 attach()
方法将正文和附件加入邮件中。
6. 总结
通过 Python 的 smtplib
模块,我们能够轻松实现各种形式的邮件发送。无论是普通文本邮件、HTML 邮件、带附件邮件,还是通过第三方 SMTP 服务,都可以通过简单的代码实现自动化。
在实际应用中,发送邮件功能非常适合用在自动化报告、通知、提醒等场景中。通过掌握这些技巧,我们可以使 Python 更好地服务于我们的工作与生活。
希望这篇教程能对你有所帮助!如果你有任何问题或想要进一步了解 Python 的其他功能,欢迎在评论区留言。