- SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib
提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
用到的包和库:
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
下面展示一个简单的例子(来自https://www.runoob.com/python/python-email.html):
sender = 'sneder@163.com' # 发送者的邮箱
receivers = ['receiver@qq.com', ] # 接收者的邮箱,这是一个列表,支持多个发送对象
# email.mime.text.MIMEText(text, subtype='plain', charset=None, *, policy=compat32)
# used to create MIME objects of major type text (https://docs.python.org/3/library/email.mime.html)
# text 为文本内容(str)
# subtype 为文本格式(str, e.g 'plain', 'base64')
# charset为编码格式(e..g 'utf-8')
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8') # 设置发送者名称
message['To'] = Header("测试", 'utf-8') # 设置接收者名称
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8') # 设置邮件主题
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message.as_string())
print "邮件发送成功"
except smtplib.SMTPException:
print "Error: 无法发送邮件"
上述发送方式是本机发送,必须是本机已安装了支持 SMTP 的服务,如:sendmail。
===================================================
- 如果我们使用的计算机未安装SMTP服务,则可以使用邮件服务商的 提供的 SMTP (也叫做第三方邮件客户端或第三方邮件服务器)进行发送。
此时需要使用到smtplib.SMTP()
对象
首先,设置第三方邮件服务器
# 第三方 SMTP 服务器
mail_host="smtp.163.com" #设置服务器域名
第三方服务器域名可以通过查看自己的邮箱设置找到
接下来,设置发送者邮箱(用户名),密码(口令)
mail_user="XXXX" #用户名
mail_pass="XXXXXX" #口令
注意:此处的口令并不是邮箱的密码,而是第三方邮件客户端授权码,需要开启客户端授权并设置口令(授权码,该授权码与邮箱登录密码不能相同)。开启客户端授权流程如下图所示:
sender = 'from@runoob.com'
receivers = ['429240967@qq.com']
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # SMTP 端口号为25,也可以使用SSL 安全链接端口,默认为465
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print "邮件发送成功"
except smtplib.SMTPException:
print "Error: 无法发送邮件"
- 如果需要发送的文本很长,不方便在python脚本中直接赋值,可以通过读取文件,再转换为字符串的方式。
inf = "./input.txt"
# read input text
with open(inf, 'r', encoding='utf-8') as fp:
mystrs = fp.readlines()
assert fp, "Input file error!! Check your inuput file {}".format(inf)
# convert list to strings
text = "".join(mystrs)
message = MIMEText(text, 'plain', 'utf-8')
- smtplib当然也是支持发送附件的,关于如何发送附件,请参考:
https://www.runoob.com/python/python-email.html
https://blog.csdn.net/qq503690160/article/details/89916301
本文大部分内容参考上述两个博客,并成功测试了上述发送邮件过程