首页
学习
活动
专区
圈层
工具
发布

使用SMTP从Python发送邮件

使用SMTP从Python发送邮件

基础概念

SMTP (Simple Mail Transfer Protocol) 是一种用于发送电子邮件的互联网标准协议。Python通过smtplib模块提供了SMTP协议的支持,可以方便地发送电子邮件。

相关优势

  1. 标准化:SMTP是广泛支持的邮件传输标准协议
  2. 灵活性:可以发送纯文本、HTML格式邮件,以及附件
  3. 自动化:适合集成到应用程序中实现自动邮件通知
  4. 跨平台:在任何支持Python的环境中都可以使用

核心组件

  1. SMTP服务器:处理邮件发送的服务器
  2. 发件人邮箱:需要配置SMTP服务权限
  3. 收件人邮箱:接收邮件的地址
  4. 邮件内容:包括主题、正文和可能的附件

基本使用示例

代码语言:txt
复制
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 配置信息
smtp_server = "smtp.example.com"  # SMTP服务器地址
smtp_port = 587  # 端口号,通常是587(TLS)或465(SSL)
sender_email = "your_email@example.com"
sender_password = "your_password"
receiver_email = "recipient@example.com"

# 创建邮件内容
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Python SMTP 测试邮件"

# 邮件正文
body = """
这是一封通过Python SMTP发送的测试邮件。
"""
message.attach(MIMEText(body, "plain"))

try:
    # 创建SMTP连接
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()  # 启用TLS加密
        server.login(sender_email, sender_password)
        server.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功!")
except Exception as e:
    print(f"邮件发送失败: {e}")

高级功能

发送HTML邮件

代码语言:txt
复制
html = """\
<html>
  <body>
    <p>这是一封<strong>HTML格式</strong>的邮件</p>
  </body>
</html>
"""
message.attach(MIMEText(html, "html"))

发送带附件的邮件

代码语言:txt
复制
from email.mime.base import MIMEBase
from email import encoders

filename = "example.pdf"  # 附件文件路径

with open(filename, "rb") as attachment:
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
    "Content-Disposition",
    f"attachment; filename= {filename}",
)
message.attach(part)

发送给多个收件人

代码语言:txt
复制
recipients = ["recipient1@example.com", "recipient2@example.com"]
message["To"] = ", ".join(recipients)

常见问题及解决方案

  1. 认证失败
    • 原因:用户名/密码错误,或未开启SMTP服务
    • 解决:检查凭据,确保邮箱已开启SMTP服务
  • 连接超时
    • 原因:SMTP服务器地址或端口错误,或网络问题
    • 解决:验证服务器信息,检查网络连接
  • 被标记为垃圾邮件
    • 原因:邮件内容触发垃圾邮件过滤器
    • 解决:优化邮件内容,避免垃圾邮件关键词
  • TLS/SSL连接问题
    • 原因:服务器配置变更或证书问题
    • 解决:尝试不同的安全连接方式(starttls或SSL)
  • 发送限制
    • 原因:SMTP服务器有发送频率限制
    • 解决:降低发送频率,或联系邮件服务提供商

安全建议

  1. 不要在代码中硬编码密码,使用环境变量或配置文件
  2. 优先使用TLS/SSL加密连接
  3. 对用户输入进行验证,防止邮件注入攻击
  4. 考虑使用OAuth2认证而非明文密码

应用场景

  1. 系统监控告警通知
  2. 用户注册验证邮件
  3. 定期报告自动发送
  4. 应用内通知系统
  5. 营销邮件批量发送(需遵守相关法规)

通过Python的SMTP功能,开发者可以轻松实现各种邮件发送需求,从简单的通知到复杂的邮件营销系统。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券