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
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
发送邮件六步曲
- 设置SMTP服务器连接信息
- 创建邮件对象并设置内容
- 添加收件人/发件人信息
- 添加邮件主题
- 添加正文(纯文本/HTML)
- 添加附件(可选)
- 连接服务器并发送
邮件发送流程图解
1
导入模块
2
登录邮件账号
3
创建邮件内容
4
添加附件
5
发送邮件
6
关闭连接
邮件内容组成
一封完整的邮件包含多个部分:
- 发件人(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}”)
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版本
- 使用模板生成邮件内容
- 添加邮件头信息(如优先级)
- 定时发送邮件
- 处理邮件发送结果(成功/失败)