python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python自动发送邮件

使用Python程序自动发送邮件的完整流程

作者:科雷learning

本文主要介绍了通过Python发送邮件的方法,包括开启邮箱相关服务、设置授权码、使用smtplib和email库构建邮件并发送,详细说明了不同邮箱对应的SMTP/POP3服务器地址、端口及使用注意事项,并提供了发送纯文本、HTML格式及带附件邮件的实例,需要的朋友可以参考下

01 准备工作

登录自己的邮箱,在设置中,打开SMTP/POP3服务,并新增授权码(授权码个人保存好,后续邮件服务鉴权时会用到)。

以上是qq邮箱,126邮箱和163邮箱在设置中打开服务的截图,供大家参考。

打开服务后,不同邮箱对应的服务地址和端口如下:

163邮箱的服务地址和端口如下:

126邮箱的SMTP服务器地址是smtp.126.com,POP3服务器地址为pop.126.com,imap.126.com;端口号同163邮箱地址

QQ邮箱的SMTP服务器地址是smtp.qq.com,端口号为587或465;POP3服务器地址为pop.qq.com,端口号为110或995;imap.qq.com,使用SSL,端口号143或993

SMTP(Simple Mail Transfer Protocol)是用来发送邮件的协议,而POP3(Post Office Protocol 3)是用来接收邮件的协议。

通过设置正确的邮箱地址和端口号,我们就可以成功收发邮件了。

02发送邮件程序用到的核心库与函数介绍

Python主要通过smtplib(SMTP协议客户端)和email(邮件内容构建)两大库实现邮件发送功能,核心函数功能如下:

1. smtplib.SMTP():创建SMTP连接

import smtplib
# 创建普通连接
server = smtplib.SMTP('smtp.qq.com', 587)
# 启动TLS加密
server.starttls()
# 登录邮箱
server.login('xxx@qq.com', 'password')
#创建SSL连接 填写SSL端口号
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录邮箱
server.login('xxx@qq.com', 'password')

注意:部分邮箱需使用授权码代替密码登录,如QQ邮箱需在设置中开启 “POP3/SMTP 服务” 获取授权码。

2. email.mime模块:构建邮件内容

1)email.mime.text.MIMEText():创建文本邮件

参数介绍:

from email.mime.text import MIMEText
# 创建纯文本邮件内容
text = "这是一封测试邮件!"
msg = MIMEText(text, 'plain', 'utf-8')  
# 创建HTML邮件内容
html = """
<html>
<body>
<h1>欢迎订阅周报</h1>
<p>本周热点:...</p>
</body>
</html>
"""
msg = MIMEText(html, 'html')

2)email.mime.multipart.MIMEMultipart():创建多格式邮件(支持附件)

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# 创建多格式
msg = MIMEMultipart()
#通过attach函数 添加纯文本内容MIMEText
msg.attach(MIMEText("邮件正文", 'plain', 'utf-8'))
# 通过MIMEApplication添加附件test.xlsx
with open('test.xlsx', 'rb') as f:
    part = MIMEApplication(f.read(), Name='test.xlsx')
#设置附件名字
    part['Content-Disposition'] = f'attachment; filename="test.xlsx"'
#通过attach函数 添加附件MIMEApplication
msg.attach(part)

3. 邮件头部设置

4. server.sendmail():发送邮件

功能:将构建好的邮件发送给收件人。

参数:from_addr:发件人邮箱

        to_addrs:收件人邮箱列表

        msg.as_string():将邮件对象转换为字符串格式

案例:发送邮件

# 假设已创建msg邮件对象
server.sendmail('xx@xxx.com', ['xx1@xxx.com','xx2@xxx.com'], msg.as_string())
server.quit()

5、实际案例

案例 1:发送纯文本邮件

import smtplib
from email.mime.text import MIMEText
# 创建连接
server = smtplib.SMTP('smtp.126.com', 25)
# 启动TLS加密
server.starttls()
# 登录邮箱
server.login('xxx1@xxx.com', 'xxxx')
# 创建纯文本邮件内容
text = "这是一封测试邮件!"
msg = MIMEText(text, 'plain', 'utf-8')
msg['Subject'] = text
msg['From'] = 'xxx1@xxx.com'
msg['To'] = 'xx1@xx.com,xx2@xx.com'
#发送msg邮件对象
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()

实际使用中大家替换为自己的发件人邮箱和对方邮箱地址。

案例 2:发送带HTML格式的邮件

import smtplib
from email.mime.text import MIMEText
# 创建连接
server = smtplib.SMTP('smtp.126.com', 25)
# 启动TLS加密
server.starttls()
# 登录邮箱
server.login('xxx1@xxx.com', 'xxxx')
# 创建纯文本邮件内容
html = """
<html>
<body>
<h1>欢迎订阅周报</h1>
<p>本周热点:...</p>
</body>
</html>
"""
msg = MIMEText(html, 'html', 'utf-8')
msg['Subject'] = 'test'
msg['From'] = 'xxx1@xxx.com'
msg['To'] = 'xx1@xx.com,xx2@xx.com'
#发送msg邮件对象
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()

案例 3:发送附件邮件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# 创建连接
server = smtplib.SMTP('smtp.126.com', 25)
# 启动TLS加密
server.starttls()
# 登录邮箱
server.login('xxx1@xxx.com', 'xxxx')
# 创建多格式
msg = MIMEMultipart()
msg['Subject'] = text
msg['From'] = 'xxx1@xxx.com'
msg['To'] = 'xx1@xx.com,xx2@xx.com'
#通过attach函数 添加纯文本内容MIMEText
msg.attach(MIMEText("邮件正文", 'plain', 'utf-8'))
# 通过MIMEApplication添加附件test.xlsx
with open('test.xlsx', 'rb') as f:
    part = MIMEApplication(f.read(), Name='test.xlsx')
#设置附件名字
    part['Content-Disposition'] = f'attachment; filename="test.xlsx"'
#通过attach函数 添加附件MIMEApplication
msg.attach(part)
#发送msg邮件对象
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()

03 附录

常用的policy策略

1.email.policy.default

功能:默认策略,提供了较为通用的邮件处理方式。在解析邮件时,它会保留邮件头部字段的原始大小写,并使用系统默认的编码方式进行处理。

适用场景:适用于大多数常规的邮件处理需求,不需要对邮件解析和构造进行特殊定制的场景。

2.email.policy.SMTP

功能:遵循 SMTP 协议标准的策略。该策略会将邮件头部字段转换为大写,符合 SMTP 协议中对头部字段的规范要求 ,并且在处理邮件内容时,会按照 SMTP 协议的规则进行编码和换行处理。

适用场景:当需要严格遵循 SMTP 协议标准来发送或解析邮件时使用,例如与其他遵循 SMTP 协议的邮件服务器进行交互。

3.email.policy.compat32

功能:为了兼容 Python 3.2 及以前版本的邮件处理方式而设计的策略。它会将邮件头部字段转换为大写,并对邮件内容进行一些兼容性的处理,以保持与旧版本的一致性。

适用场景:在需要与使用旧版 Python 邮件处理逻辑的系统进行交互,或者需要保证代码在不同 Python 版本下行为一致时使用。

4.email.policy.SMTPUTF8

功能:在SMTP策略的基础上,支持 UTF-8 编码的邮件内容。它会正确处理包含非 ASCII 字符的邮件头部和正文,确保在 SMTP 传输过程中不会出现编码错误。

适用场景:当邮件内容包含多种语言文字、特殊字符,需要在 SMTP 传输中保证编码正确性时使用。

掌握Python邮件功能,能为你的自动化工作流增添强大助力!无论是个人通知还是企业级应用,都可以通过灵活组合这些函数实现。

以上就是使用Python程序自动发送邮件的完整流程的详细内容,更多关于Python自动发送邮件的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文