二话不说,先上代码
(使用QQ邮箱SMTP服务需要手动去安全设置里开启,目前只有开启QQ邮箱14天以上的QQ号才能开启SMTP服务)
import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 邮件内容
subject = '测试'
body = '测试邮件'
# 构建邮件
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = "你的QQ邮箱地址"
msg['To'] = '目标邮箱地址'
# 发送邮件
smtp_server = 'smtp.qq.com'
smtp_port = 587
sender_email = '你的邮箱地址'
receiver_email = '目标邮箱地址'
password = "在QQ邮箱设置里拿到的码"
server = smtplib.SMTP(smtp_server,smtp_port)
server.starttls()
server.login(sender_email,password)
try:
server.sendmail(sender_email,receiver_email, msg.as_string())
msg.as_string()
print('邮件发送成功')
server.quit()
except Exception as e:
print("%s%s" %'邮件发送失败:',e)
server.quit()
1. 调用相关smtplib
import smtplib
from email.mime.text import MIMEText
from email.header import Header
SMTPLIB是python自带的内置的库,它允许用户通过Python代码直接连接到指定的SMTP服务器,并发送电子邮件。这些邮件可以是纯文本、HTML格式,甚至可以包含附件。SMTPLIB提供了必要的接口来构建邮件内容、设置邮件头信息(如发件人、收件人、主题等),并通过SMTP协议将邮件发送到指定的收件人邮箱。
SMTPLIB的主要方法
SMTP(host, port):创建一个SMTP连接。其中,host是SMTP服务器的主机名或IP地址,port是SMTP服务器的端口号。
SMTP_SSL(host, port):创建一个带有SSL加密的SMTP连接。这适用于需要安全连接的SMTP服务器。
sendmail(sender, receiver, message):发送邮件。其中,sender是发件人的电子邮件地址,receiver是收件人的电子邮件地址(可以是一个或多个),message是邮件的内容,通常是一个包含邮件头和邮件体的字符串。
SMTP(host, port).starttls():SSL由于安全性等问题已经处于淘汰的边缘,smtplib支持通过starttls发放将链接升级为TLS模式,现在大多数smtp服务起都同时支持SSL和TLS
quit():关闭SMTP连接。
此外,SMTPLIB还提供了一些其他方法,如set_debuglevel(level)用于设置调试级别,login(user, password)用于登录到需要身份验证的SMTP服务器等。
使用SMTPLIB发送邮件的步骤
配置SMTP服务器信息:包括SMTP服务器的主机名或IP地址、端口号、发件人的电子邮件地址和授权码(如果需要身份验证)。
创建SMTP连接:使用SMTP或SMTP_SSL方法创建与SMTP服务器的连接。
登录SMTP服务器(如果需要):使用login方法登录到SMTP服务器,提供发件人的电子邮件地址和授权码。
构建邮件内容:使用email包中的类(如MIMEText、MIMEMultipart等)来构建邮件内容,包括邮件头信息和邮件体。
发送邮件:使用sendmail方法将邮件发送到指定的收件人邮箱。
关闭SMTP连接:使用quit方法关闭与SMTP服务器的连接。
四、注意事项
SMTP服务器和端口:确保知道SMTP服务器的地址和端口。大多数电子邮件服务提供商使用标准的SMTP端口(如Gmail使用的是587或465),但最好通过搜索确认以获得最准确的信息。
身份验证:在使用SMTP服务器发送邮件之前,需要进行身份验证。这通常涉及提供发件人的电子邮件地址和授权码(而不是密码)。
安全性:考虑使用SSL/TLS加密连接来保护邮件传输过程中的数据安全。如果SMTP服务器支持,可以使用SMTP_SSL类来代替SMTP类。
附件和HTML内容:如果需要发送带有附件或HTML内容的邮件,可以使用email包来构建MIMEMultipart和MIMEText对象。
避免被标记为垃圾邮件:确保邮件内容、主题和发送行为不会导致邮件被接收者的邮件服务提供商标记为垃圾邮件。
构建邮件主体
# 邮件内容
subject = '邮件主题'
body = '邮件内容'
# 构建邮件
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = "你的QQ邮箱地址"
msg['To'] = '目标邮箱地址'
在Python的email
模块中,MIMEText类用于创建一个简单的文本消息体。这个类通常用于构建电子邮件的内容部分,可以是纯文本或HTML格式。
这一部分内容比较简单,主要说一下MIMEText这个函数
MIMEText(body, _subtype, _charset)
是MIMEText类的构造函数,其中:
body
是邮件正文的文本内容。
_subtype
指定了文本的类型,对于纯文本邮件,这个值应该是'plain'
;对于HTML格式的邮件,这个值应该是'html'
。
_charset
指定了字符集,这对于确保邮件正文正确显示各种字符(特别是非ASCII字符)非常重要。'utf-8'
是一种广泛使用的字符集,能够表示多种语言的字符。
设置邮箱参数
smtp_server = 'smtp.qq.com'
smtp_port = 587
sender_email = '你的邮箱地址'
receiver_email = '目标邮箱地址'
password = "在QQ邮箱设置里拿到的授权码"
如果你的主机已经安装了SMTP服务(具体方式可自行百度“Windows系统安装STMP服务”),那你的主机本身就可以当作SMTP服务器使用,smtp_server
就可以设定为 localhost
。 如果你使用的是第三方服务器(例如本文中就是用的是QQ邮箱)则需要填写对应的STMP服务器地址,百度一下即可。
这里要重点强调一下端口问题,有些服务器针对的不同协议的连接方式开放不同的端口,比如在测试时笔者发现。QQ邮箱的465
端口支持SSL协议,但不支持TLS协议。 如果使用TLS协议传输文件的话要使用25
或者587
端口
创建链接
server = smtplib.SMTP(smtp_server,smtp_port) # 创建一个链接到指点SMTP服务器的链接对象
server.starttls() # 启动TLS协议
server.login(sender_email,password) # 登录你的邮箱
发送邮件
try:
server.sendmail(sender_email,receiver_email, msg.as_string())
print('邮件发送成功')
server.quit()
except Exception as e:
print("%s%s" %'邮件发送失败:',e)
server.quit()