Python3 SMTP发送邮件

Python3 SMTP邮件发送小白指南

Python3 SMTP邮件发送指南

编程小白也能理解的邮件发送知识点大全

什么是SMTP?

SMTP(Simple Mail Transfer Protocol)是发送电子邮件的标准协议。就像邮局系统处理普通邮件一样,SMTP负责在互联网上传输电子邮件。

  • 用于从发件人发送邮件到邮件服务器
  • 服务器之间传递邮件
  • 不负责接收邮件(那是POP3/IMAP的工作)

核心模块

Python发送邮件主要使用两个内置模块:

  • smtplib – 与SMTP服务器通信
  • email – 创建和格式化邮件内容
# 导入必需的模块
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

发送邮件六步曲

  1. 设置SMTP服务器连接信息
  2. 创建邮件对象并设置内容
  3. 添加收件人/发件人信息
  4. 添加邮件主题
  5. 添加正文(纯文本/HTML)
  6. 添加附件(可选)
  7. 连接服务器并发送

邮件内容组成

一封完整的邮件包含多个部分:

  • 发件人(From):你的邮箱地址
  • 收件人(To):接收者的邮箱地址
  • 主题(Subject):邮件标题
  • 正文(Body):邮件内容(可以是纯文本或HTML)
  • 附件(Attachment):附加的文件
  • 抄送(CC):其他需要知晓此邮件的人
  • 密送(BCC):秘密抄送(其他人看不到)

常用邮件服务商设置

QQ邮箱

服务器: smtp.qq.com

端口: 465(SSL)或587(TLS)

163邮箱

服务器: smtp.163.com

端口: 465(SSL)

Gmail

服务器: smtp.gmail.com

端口: 587(TLS)

Outlook

服务器: smtp.office365.com

端口: 587(TLS)

授权码是什么?

重要提示:现在大多数邮箱服务商都不允许直接使用邮箱密码登录,需要使用授权码代替密码!

  • 授权码是邮箱服务商提供的特殊密码
  • 需要在邮箱设置中生成授权码
  • 每个邮箱生成授权码的方式不同
  • 授权码只显示一次,务必保存好

在代码中,应该使用授权码而不是邮箱密码

完整代码示例

# 导入必要模块
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

# 1. 邮件基本信息
sender_email = “your_email@example.com” # 你的邮箱
receiver_email = “receiver@example.com” # 收件人邮箱
password = “your_authorization_code” # 邮箱授权码(不是密码)
smtp_server = “smtp.example.com” # 邮件服务商的SMTP服务器
smtp_port = 587 # 端口号(通常587或465)

# 2. 创建邮件内容
message = MIMEMultipart() # 创建多部分邮件
message[“From”] = sender_email
message[“To”] = receiver_email
message[“Subject”] = “Python邮件发送测试” # 邮件主题

# 3. 添加邮件正文
body = “””
<h1>你好!这是一封测试邮件</h1>
<p>此邮件由Python程序自动发送</p>
<p><b>恭喜!</b>你已经学会了用Python发送邮件</p>
<p><a href=”https://www.python.org”>访问Python官网</a></p>
“””
# 添加HTML格式的正文
message.attach(MIMEText(body, “html”))

# 4. 添加附件(可选)
# filename = “example.pdf”
# with open(filename, “rb”) as file:
# attach = MIMEApplication(file.read(), Name=filename)
# attach[‘Content-Disposition’] = f’attachment; filename=”{filename}”‘
# message.attach(attach)

# 5. 发送邮件
try:
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls() # 启用TLS加密(如果使用587端口)
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message.as_string())
    print(“邮件发送成功!”)
except Exception as e:
    print(f”发送失败: {e}”)

常见问题解决

  • 认证错误:通常是邮箱或授权码错误
  • 连接拒绝:检查服务器地址和端口是否正确
  • 邮件发送失败:检查收件人地址格式
  • 邮件进入垃圾箱:添加合理的邮件主题和正文
  • 附件太大:大多数邮箱限制附件大小(通常是25MB)

安全注意事项

  • 不要在代码中直接写入邮箱和授权码
  • 使用环境变量或配置文件存储敏感信息
  • 优先使用TLS/SSL加密连接
  • 不要公开分享你的授权码
  • 定期更新授权码

进阶技巧

  • 发送给多个收件人(列表形式)
  • 同时发送纯文本和HTML版本
  • 使用模板生成邮件内容
  • 添加邮件头信息(如优先级)
  • 定时发送邮件
  • 处理邮件发送结果(成功/失败)

© 2023 Python3 SMTP邮件发送指南 | 编程小白也能轻松掌握的邮件发送技能

提示:在实际使用中,请替换示例中的邮箱、授权码和服务器信息

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部