最近在练习使用Python发送邮件,实现项目功能告警的DEMO案例。也是第1次使用Python实现发送邮件的功能,在过程中也遇到了一些问题,因此,做一下问题的相关记录。
主要参考的学习文章:
https://blog.51cto.com/u_15535797/8798106
https://www.cnblogs.com/yufeihlf/p/5726619.html
我这边选择使用的发送邮箱是新浪邮箱,前期准备工作:
如果邮箱未正确进行授权设置的话,代码运行过程中,则会遇到类似如下的报错问题:
主要使用到的包是Python自带的smtplib包。
示例代码如下:
# -*- coding: utf-8 -*-
import smtplib
from email.header import Header
from email.mime.text import MIMEText
class Email(object):
def __init__(self, content):
# 发送邮件地址
self.from_addr = 'your_from_mail_address'
# SMTP服务的密码, 就是上述图中的授权码
# 此处注意:并不是邮箱的登录密码
self.password = 'your_password'
# 目的邮件地址
self.to_addr = 'your_to_mail_address'
# 邮件标题
self.subject = 'your_email_subject'
# 邮件内容
self.content = content
def _make_message(self):
# 使用MIMEText()构造一个文本格式的邮件
message = MIMEText(self.content, 'plain', 'utf-8')
# 构造邮件头From
message['From'] = Header(self.from_addr)
# 构造邮件头To
message['To'] = Header(self.to_addr, 'utf-8')
# 构造邮件主题
message['Subject'] = Header(self.subject, 'utf-8')
return message
def send_mail(self):
# 创建SMTP实例
# smtp= smtplib.SMTP()
# 连接SMTP服务器
# smtp.connect('smtp.qq.com')
# 此处直接一步到位
smtp = smtplib.SMTP_SSL("smtp.sina.com")
# 登录SMTP服务
smtp.login(self.from_addr, self.password)
mail_message = self._make_message()
# 通过SMTP服务器发送邮件
smtp.sendmail(self.from_addr, self.to_addr, mail_message.as_string())
smtp.quit()
print('success')
if __name__ == '__main__':
email_obj = Email('测试一下')
email_obj.send_mail()
由于使用的是新浪邮箱来发送邮件的关系,此处,还有个坑点问题:
smtplib.SMTPDataError: (553, b'Envolope sender mismatch with header from..')
最后,还是参考了前辈的这篇文章,才将这个报错问题解决了的。
注意点:message['From'] = Header(self.from_addr),这个Header函数的第2参数,不要惯性的添加上'utf-8'。
目前,我也仅仅是完成很简单的功能版本,后续还需要不断加固对这块的认识,很感谢前辈们对自己实践过程中的学习记录,才降低了后来者的学习成本。