基于SMTP协议发送邮件
开发背景
程序运行过程产生意外情况,如何及时通知到维护人员呢?可以在代码中嵌入自动发送邮件的模块,这样有意外情况就会发送邮件到维护员邮箱。(短信、电话需要经过运营商很麻烦,QQ、微信腾讯方面管控很严格,邮箱相对比较容易)
运行环境
Python=3.8
库文件(发送内容涉及中文,建议增加# coding:utf-8编码)
# coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
工作流程
1、申请邮箱SMTP服务(以QQ邮箱为例)
①登录QQ邮箱,点击邮箱设置——账号
②下拉进入如下菜单,确认服务状态为开启,点击管理服务,找到生成授权码按钮,按提示申请一组授权码(保存好备用)
2、代码实现
①构建邮件内容:
class Mail:
def __init__(self):
# 第三方 SMTP 服务
self.mail_host = "smtp.qq.com" # 设置服务器:这个是qq邮箱服务器,复制就行
self.mail_pass = "xbxxxxxxxei" # 刚才我们获取的授权码
self.sender = 'suxxxx@xx.com' # 你的邮箱地址
self.receivers = [] # 收件人的邮箱地址,可设置为你的QQ邮箱或者其他邮箱,可多个
self.mail_content = ''
def send(self,content):
# content = self.mail_content # 邮件内容
# content += 'Hello:这是一个测试邮件\r\n'
# content += '<p>再见</p>'
message['From'] = Header("'=?UTF-8?B?5Zif5Zif' <{}>".format(self.sender)) # 发件人名称
message['To'] = Header("'=?UTF-8?B?5ZW+5ZW+' <{}>".format(self.receivers)) # 收件人名称
subject = content #邮件主题
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP_SSL(self.mail_host, 465)
smtpObj.login(self.sender, self.mail_pass)
smtpObj.sendmail(self.sender, self.receivers, message.as_string())
smtpObj.quit()
print('邮件发送成功')
except smtplib.SMTPException as e:
print('邮件发送失败',self.receivers,e)
②定义发送邮件函数
def send_mail(content,re_mail):
mail = Mail()
if re_mail != '':
mail.receivers = [re_mail]
mail.send(content)
③主函数(形如发送人、接收人等信息都写在①里面(偷个懒),有需要的朋友可以自行修改)
if __name__ == '__main__':
content = 'hanshu ceshi'
send_mail(content)
以上就完成自动发邮件的能力