摘要:在 Python 中发送邮件的常用方式主要依赖标准库 smtplib(处理 SMTP 协议)和 email(构造邮件内容),同时也存在一些第三方库和服务。以下是常见的实现方式及示例:
在 Python 中发送邮件的常用方式主要依赖标准库 smtplib(处理 SMTP 协议)和 email(构造邮件内容),同时也存在一些第三方库和服务。以下是常见的实现方式及示例:
一、使用 smtplib + email 标准库
1. 发送纯文本邮件
python
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
# 邮件配置
smtp_server = "smtp.example.com" # SMTP服务器地址(如QQ邮箱:smtp.qq.com)
port = 465 # 通常SSL端口为465,非加密为25或587
sender = "sender@example.com"
password = "your_password" # 邮箱密码或授权码(如QQ邮箱需用授权码)
receiver = "receiver@example.com"
# 构造邮件
msg = MIMEText("这是一封纯文本邮件。", "plain", "utf-8")
msg["From"] = formataddr(("发件人名称", sender))
msg["To"] = formataddr(("收件人名称", receiver))
msg["Subject"] = "邮件主题"
# 发送邮件
try:
with smtplib.SMTP_SSL(smtp_server, port) as server:
server.login(sender, password)
server.sendmail(sender, [receiver], msg.as_string)
print("邮件发送成功")
except Exception as e:
print(f"发送失败: {e}")
2. 发送HTML邮件
python
html_content = """
这是一封HTML邮件
点击链接
"""
msg = MIMEText(html_content, "html", "utf-8")
# 其余配置同上
3. 发送带附件的邮件
python
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
msg = MIMEMultipart
msg.attach(MIMEText("正文内容", "plain", "utf-8"))
# 添加附件
with open("file.pdf", "rb") as f:
attach = MIMEApplication(f.read, Name="file.pdf")
attach["Content-Disposition"] = 'attachment; filename="file.pdf"'
msg.attach(attach)
# 设置邮件头信息后发送
二、使用第三方库 yaGmail(简化操作)
安装:pip install yagmail
python
import yagmail
# 配置账号(首次使用会提示输入密码)
yag = yagmail.SMTP(user="sender@example.com", password="your_password", host="smtp.example.com")
# 发送邮件(自动处理附件和HTML)
contents = [
"正文内容",
"可添加多个段落或HTML内容",
yagmail.inline("image.jpg"), # 内嵌图片
"file.pdf" # 附件路径
]
yag.send(
to="receiver@example.com",
subject="邮件主题",
contents=contents
)
三、使用企业邮箱服务(示例:腾讯企业邮)
python
smtp_server = "smtp.exmail.qq.com"
port = 465
sender = "name@company.com"
password = "企业邮箱密码"
# 使用 smtplib 的代码同上,配置对应服务器和认证信息即可
四、通过第三方API服务(如 sendGrid)
安装:pip install sendgrid
python
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
api_key = "YOUR_SENDGRID_API_KEY"
message = Mail(
from_email="sender@example.com",
to_emails="receiver@example.com",
subject="邮件主题",
html_content="HTML内容"
)
try:
sg = SendGridAPIClient(api_key)
response = sg.send(message)
print(f"状态码: {response.status_code}")
except Exception as e:
print(f"错误信息: {e}")
五、其他服务(如 Mailgun)
安装:pip install requests
python
import requests
api_url = "https://api.mailgun.net/v3/YOUR_DOMAIN/messages"
api_key = "YOUR_MAILGUN_API_KEY"
response = requests.post(
api_url,
auth=("api", api_key),
data={
"from": "sender@example.com",
"to": ["receiver@example.com"],
"subject": "邮件主题",
"text": "纯文本内容",
"html": "HTML内容"
}
)
print(response.status_code)
注意事项
安全性:Ø 避免在代码中硬编码密码,推荐使用环境变量或配置文件。
Ø 使用加密连接(如 SMTP_SSL 或 starttls)。
常见问题:Ø Gmail 需开启 允许不够安全的应用(不推荐)或使用 OAuth2 认证。
Ø 国内邮箱(如 QQ、163)通常需要 授权码 而非明文密码。
反垃圾邮件:Ø 避免频繁发送相同内容,确保发件人信息合法。
根据需求选择合适的方式:标准库灵活但复杂,第三方库(如 yagmail)简化流程,API 服务适合大规模发送。
来源:老客数据一点号