开发中常常会有消息的订阅、通知以及身份认证等操作,相较于手机短信的付费属性,电子邮件的发送显得更加的平价且方便,本文主要介绍如何通过python
实现电子邮件的发送功能。
发送邮件使用的是SMTP
协议,SMTP
也是一个建立在TCP
(传输控制协议)提供的可靠数据传输服务的基础上的应用级协议,它规定了邮件的发送者如何跟发送邮件的服务器进行通信的细节,而Python
中的smtplib
模块将这些操作简化成了几个简单的函数。如下为邮件发送示例代码:
from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import urllib
def main():
# 创建一个带附件的邮件消息对象
message = MIMEMultipart()
# 创建文本内容
text_content = MIMEText('附件中有本月数据请查收', 'plain', 'utf-8')
message['Subject'] = Header('本月数据', 'utf-8')
# 将文本内容添加到邮件消息对象中
message.attach(text_content)
# 读取文件并将文件作为附件添加到邮件消息对象中
with open('/Users/Hao/Desktop/hello.txt', 'rb') as f:
txt = MIMEText(f.read(), 'base64', 'utf-8')
txt['Content-Type'] = 'text/plain'
txt['Content-Disposition'] = 'attachment; filename=hello.txt'
message.attach(txt)
# 读取文件并将文件作为附件添加到邮件消息对象中
with open('/Users/Hao/Desktop/汇总数据.xlsx', 'rb') as f:
xls = MIMEText(f.read(), 'base64', 'utf-8')
xls['Content-Type'] = 'application/vnd.ms-excel'
xls['Content-Disposition'] = 'attachment; filename=month-data.xlsx'
message.attach(xls)
# 创建SMTP对象
smtper = SMTP('smtp.126.com')
# 开启安全连接
# smtper.starttls()
sender = 'abcdefg@126.com'
receivers = ['uvwxyz@qq.com']
# 登录到SMTP服务器
# 请注意此处不是使用密码而是邮件客户端授权码进行登录
# 对此有疑问的读者可以联系自己使用的邮件服务器客服
smtper.login(sender, 'secretpass')
# 发送邮件
smtper.sendmail(sender, receivers, message.as_string())
# 与邮件服务器断开连接
smtper.quit()
print('发送完成!')
if __name__ == '__main__':
main()
如上代码可以实现邮件的文本发送和附件发送功能,发送开始前需要配置发送者的SMTP地址并添加邮件服务商提供的安全授权码:
# 创建SMTP对象
smtper = SMTP('smtp.126.com') # smtp地址
# 开启安全连接
# smtper.starttls()
sender = 'abcdefg@126.com' # 发送者邮箱地址
receivers = ['uvwxyz@qq.com']
# 登录到SMTP服务器
smtper.login(sender, 'secretpass') # smtp服务授权码