在 Ubuntu 上配置 Python 邮件发送功能
一 准备与方案选择
二 方案一 使用外部邮箱 SMTP 发送(推荐)
import os, smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# 从环境变量读取敏感信息
sender = os.getenv("MAIL_USER")
password = os.getenv("MAIL_PASS")
receiver = "recipient@example.com"
# 创建邮件
msg = MIMEMultipart()
msg["From"] = sender
msg["To"] = receiver
msg["Subject"] = "Python 邮件测试"
# 正文
msg.attach(MIMEText("这是一封来自 Python 的测试邮件(文本)", "plain", "utf-8"))
# 附件
filename = "example.py"
with open(filename, "rb") as f:
part = MIMEBase("application", "octet-stream")
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", f"attachment; filename={filename}")
msg.attach(part)
# 发送
try:
with smtplib.SMTP("smtp.gmail.com", 587) as server: # 如用 SSL 可改为 smtp.gmail.com:465 并使用 SMTP_SSL
server.starttls()
server.login(sender, password)
server.sendmail(sender, receiver, msg.as_string())
print("邮件发送成功")
except Exception as e:
print("发送失败:", e)
pip install py-email(可选,标准库已包含 email)export MAIL_USER=你的邮箱、export MAIL_PASS=你的授权码/应用专用密码三 方案二 使用 Postfix 作为本地 MTA 发送
sudo apt update && sudo apt install postfix/etc/postfix/main.cf,确保包含:
myhostname = your_fqdnmydomain = your_domainmyorigin = $mydomaininet_interfaces = allsudo systemctl restart postfiximport smtplib
from email.mime.text import MIMEText
msg = MIMEText("这是通过本机 Postfix 发送的测试邮件。", "plain", "utf-8")
msg["From"] = "you@your_domain"
msg["To"] = "recipient@example.com"
msg["Subject"] = "Postfix 测试"
try:
with smtplib.SMTP("localhost", 25) as server:
server.sendmail(msg["From"], [msg["To"]], msg.as_string())
print("邮件发送成功")
except Exception as e:
print("发送失败:", e)
四 常见问题与排查
五 Web 框架与第三方库
MAIL_SERVER/MAIL_PORT/MAIL_USE_TLS/MAIL_USERNAME/MAIL_PASSWORD,通过环境变量管理凭证,示例见常见实践。