Python 发送 SMTP 邮件完整指南:模块、端口与实战代码

Aria
Aria
发布时间:2026-10-14 | 3人浏览过
原创

本文详细介绍如何使用 Python 发送 SMTP 邮件。涵盖 smtplib 和 email 两大核心模块,解析 25、465、587 端口及 SSL/TLS 加密方式。通过纯文本、HTML 及附件发送三个实战场景,提供完整代码示例,包括服务器连接、登录验证(授权码)及发送流程,帮助开发者快速实现邮件自动化功能。

一、两个模块

在 Python 中实现邮件发送功能,主要依赖两个标准库模块:smtplib 模块和 email 模块。

  • smtplib 模块:主要负责与邮件服务器建立连接并执行发送邮件的操作。
  • email 模块:主要负责构建符合 RFC 标准的邮件内容结构,包括正文、标题、发件人及收件人信息等。

二、SMTP 端口

根据加密方式的不同,SMTP 服务通常使用以下端口: 1)未加密连接:使用 smtplib.SMTP 接口,默认端口为 25。 2)SSL 加密连接:使用 smtplib.SMTP_SSL 接口,默认端口为 465。 3)TLS 加密连接:通常使用端口 587。

三、四大步骤

1、构造邮件内容


# 纯文本
msg = MIMEText(content)
 
# 附件
msg = MIMEMultipart()

2、连接邮件服务器


s = smtplib.SMTP("smtp.qq.com", 25)

3、登录邮件服务器


s.login(msg_from, passwd) 

msg_from:指定发送者的邮箱地址。

passwd:指定发送者的登录密码。注意,此处并非邮箱的登录密码,而是需要在邮箱设置中开启 SMTP 服务后生成的授权码。

4、发送邮件


s.sendmail(msg_from, msg_to, msg.as_string())

参数说明: msg_from:发送方邮箱地址。 msg_to:收件方邮箱地址。 msg.as_string():将邮件对象转换为字符串格式进行发送。

四、常用场景

1、纯文本邮件


import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
 
# 发送者
msg_from = "xxxxx@qq.com"
 
# 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
passwd = "xxxxx"
 
# 接受者
msg_to = "xxxx@qq.com"
 
# 邮件文本
content = 'Python 邮件发送测试...'
 
# 邮件主题
subject = "test"
 
# 生成一个MIMEText对象(还有一些其它参数)
msg = MIMEText(content)
 
# 放入邮件主题
msg['Subject'] = Header(subject, 'utf-8')
 
# 放入发件人
msg['From'] = msg_from
 
try:
    # 连接邮件服务器
    s = smtplib.SMTP("smtp.qq.com", 25)
 
    # 登录到邮箱
    s.login(msg_from, passwd)
 
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()

2、发送 HTML 格式邮件


import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
 
# 发送者
msg_from = "xxxx@qq.com"
 
# 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
passwd = "xxxx"
 
# 接受者
msg_to = "xxxx@qq.com"
 
# 邮件文本
content = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com" rel="external nofollow" >这是一个链接</a></p>
"""
 
# 邮件主题
subject = "test"
 
# 生成一个MIMEText对象(
msg = MIMEText(content, 'html', 'utf-8')
 
# 放入邮件主题
msg['Subject'] = Header(subject, 'utf-8')
 
# 放入发件人
msg['From'] = msg_from
 
try:
    # 连接邮件服务器
    s = smtplib.SMTP("smtp.qq.com", 25)
 
    # 登录到邮箱
    s.login(msg_from, passwd)
 
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()

3、发送带附件的邮件


import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
 
 
# 发送者
msg_from = "xxxx@qq.com"
 
# 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
passwd = "xxxx"
 
# 接受者
msg_to = "xxxx@qq.com"
 
# 邮件主题
subject = "test"
 
# 生成一个MIMEMultipart对象(
msg = message = MIMEMultipart()
 
# 邮件文本
message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
 
# 放入邮件主题
msg['Subject'] = Header(subject, 'utf-8')
 
# 放入发件人
msg['From'] = msg_from
 
# 添加附件
att1 = MIMEText(open('./wordcloud_singer.py', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(att1)
 
try:
    # 连接邮件服务器
    s = smtplib.SMTP("smtp.qq.com", 25)
 
    # 登录到邮箱
    s.login(msg_from, passwd)
 
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()

以上就是 Python 发送 SMTP 邮件的简单教程的详细内容,更多关于 Python 发送邮件的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表