Python 发送邮件
在现代社会,电子邮件已经成为了人们日常生活和工作中必不可少的一部分。而对于程序员来说,通过编写代码来自动发送邮件也是一种非常常见的操作。Python 是一种功能强大且易于学习的编程语言,它提供了多种库和模块,方便我们在程序中实现发送邮件的功能。
本文将详细介绍如何使用 Python 发送邮件,包括设置邮箱账号信息、编写发送邮件的代码、处理附件发送等内容。希望通过本文的学习,读者能了解如何在自己的项目中集成发送邮件功能。
设置邮箱账号信息
在使用 Python 发送邮件之前,我们需要首先设置邮箱账号信息。这包括发件人邮箱地址、发件人用户名、发件人密码、SMTP 服务器地址等信息。以下是一些常用邮件服务提供商的 SMTP 服务器地址和端口:
- Gmail:SMTP 服务器地址为 smtp.gmail.com,端口号为 587
- 阿里云企业邮箱:SMTP 服务器地址为 smtp.mxhichina.com,端口号为 465
- QQ 邮箱:SMTP 服务器地址为 smtp.qq.com,端口号为 465
根据自己的邮箱供应商设置好上述信息后,我们就可以开始编写 Python 代码来发送邮件了。
编写发送邮件的代码
Python 提供了 smtplib 模块,可以帮助我们连接到 SMTP 服务器并发送邮件。以下是一个简单的发送邮件的代码示例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
# 设置邮箱账号信息
mail_host = "smtp.qq.com"
mail_user = "your_email@qq.com"
mail_pass = "your_password"
sender = mail_user
receivers = ["recipient1@example.com", "recipient2@example.com"]
# 创建一个带附件的邮件对象
message = MIMEMultipart()
message["From"] = Header("发件人姓名", "utf-8")
message["To"] = Header("收件人姓名", "utf-8")
subject = "Python 邮件测试"
message["Subject"] = Header(subject, "utf-8")
# 邮件正文内容
message.attach(MIMEText("这是一封通过 Python 发送的邮件。", "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)
# 连接 SMTP 服务器并发送邮件
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件 - ", e)
在上述代码中,我们首先导入了 smtplib 模块和相关的类,然后设置了邮箱账号信息。接着创建了一个带有附件的邮件对象,并最终通过 SMTP 服务器发送了一封邮件。
运行结果
执行以上代码后,如果一切设置正确,您将看到类似以下输出:
邮件发送成功
这意味着邮件已经成功发送到收件人邮箱。
处理附件发送
在实际项目中,我们可能需要发送一些重要的附件,比如报表、日志文件等。上面的代码中我们已经演示了如何发送一个附件,只需要将文件名传递给 MIMEText 并指定其类型及编码即可。
另外,如果需要发送多个附件,只需要重复构造多个 MIMEText 对象并添加到 message 中即可。
总结
通过本文的学习,我们了解了如何使用 Python 发送邮件。提供了常用邮件服务商的 SMTP 服务器地址和端口号,展示了编写发送邮件代码的示例,讲解了发送带附件的邮件的方法。
发送邮件是一个非常实用的功能,可以帮助我们实现自动化通知、报警等功能。读者可以根据自己的需求和场景扩展代码,并在实际项目中应用。