一、smtplib库
    是SMTP 简单邮件传输协议的操作模块,发送邮件时起到服务器之间的通信作用。
    发送一封邮件分为:设置服务器信息-编写邮件主体信息-进行登录发送
    发送一个文本邮件

    1. import smtplib
    2. from email.header import Header
    3. from email.mime.text import MIMEText
    4. from email.mime.multipart import MIMEMultipart
    5. # 设置服务器信息
    6. mail_host = "smtp.qq.com"
    7. mail_user = "372109913"
    8. mail_pass = "输入授权码"
    9. sender = '372109913@qq.com'
    10. receivers = ['smilepassed@163.com']
    11. # 编写邮件主体
    12. message = MIMEText('这是一个测试内容','plain','UTF-8')
    13. message['Subject'] = '一封来自测试的信' # 邮件标题
    14. message['From'] = Header("Jie的QQ邮箱","utf-8") # 邮件主体中发送者名称
    15. message['To'] = Header("Jie的163邮箱","utf-8") # 邮件主体中接收者名称
    16. # 进行登录发送
    17. try:
    18. smtpobj = smtplib.SMTP()
    19. smtpobj.connect(mail_host,25)
    20. smtpobj.login(mail_user,mail_pass)
    21. smtpobj.sendmail(sender,receivers,message.as_string())
    22. print('success')
    23. except Exception as e:
    24. print(f'error: {e}')
    25. finally:
    26. smtpobj.quit()

    1、设置服务器信息
    mail_host : SMTP 服务器主机;
    mail_user:邮箱登录账号;
    mail_pass:邮箱登录授权码;
    sender:发送邮件的邮箱地址;
    receivers:要接收邮件的地址,是一个list,即可实现群发邮件;
    2、编写邮件主体
    MIMEText(‘这是一个测试内容’,’html’,’UTF-8’) :邮件主体内容三个参数(’文本内容’,’文本格式’,’文本编码’);
    message[‘Subject’] :邮件标题;
    message[‘From’] :邮件主体中发送者名称;
    message[‘To’]:邮件主体中接收者名称;
    3、进行登录发送
    smtplib.SMTP( ):创建SMTP对象;
    通过connect( )连接SMTP服务器,参数(服务器地址,端口号);
    通过login( )进行登录,参数(用户名,登录授权码);
    sendmail 进行发送,参数(发送者邮箱,接收邮箱列表,邮件主体)

    在发送方邮箱设置中需要,打开POP3,也是在这里获取登录的“授权码”
    image.png

    发送一个带附件的邮件

    1. import smtplib
    2. from email.header import Header
    3. from email.mime.text import MIMEText
    4. from email.mime.multipart import MIMEMultipart
    5. # 设置服务器信息
    6. mail_host = "smtp.qq.com"
    7. mail_user = "372109913"
    8. mail_pass = "输入授权码"
    9. sender = '372109913@qq.com'
    10. receivers = ['smilepassed@163.com']
    11. # 编写邮件主体
    12. message = MIMEMultipart() # 生成包含多个部分的邮件主体对象
    13. message['Subject'] = '一封来自测试的信' # 邮件标题
    14. message['From'] = Header("Jie的QQ邮箱","utf-8") # 邮件主体中发送者名称
    15. message['To'] = Header("Jie的163邮箱","utf-8") # 邮件主体中接收者名称
    16. body = MIMEText('正文文本内容','plain','utf-8')
    17. message.attach(body)
    18. att_body = open(file_path, 'rb') # 以二进制的格式打开附件
    19. att = MIMEApplication(att_body.read()) # 导入附件
    20. att_body.close()
    21. att.add_header('Content-Disposition','attachment',filename='allure测试报告.zip')
    22. message.attach(att)
    23. # 进行登录发送
    24. try:
    25. smtpobj = smtplib.SMTP()
    26. smtpobj.connect(mail_host,25)
    27. smtpobj.login(mail_user,mail_pass)
    28. smtpobj.sendmail(sender,receivers,message.as_string())
    29. smtpobj.quit()
    30. print('success')
    31. except Exception as e:
    32. print(f'error: {e}')

    1、创建 message = MIMEMultipart() 对象用于构造带附件的邮件主体;
    2、通过 body = MIMEText(‘正文文本内容’,’plain’,’utf-8’) 定义邮件主体的文本内容;
    3、message.attach(body) 把文本内容添加到邮件主体中;
    4、att =MIMEApplication(open(file_path, ‘rb’).read()) 把要上传的附件以二进制打开读取后作为作为附件导入
    5、att.add_header(‘Content-Disposition’,’attachment’,filename=’allure测试报告.zip’) 通过filename定义可下载的附件名;
    6、message.attach(att) 把定义好的附件添加到message主体中;

    邮件发送模块的封装

    1. import smtplib
    2. from email.header import Header
    3. from email.mime.text import MIMEText
    4. from email.mime.multipart import MIMEMultipart
    5. from email.mime.application import MIMEApplication
    6. class SendEmail:
    7. # 初始化服务器信息
    8. def __init__(self,mail_host, mail_user, mail_pass, sender, receives):
    9. self.mail_host = mail_host
    10. self.mail_user = mail_user
    11. self.mail_pass = mail_pass
    12. self.sender = sender
    13. self.receivers = receives
    14. # 以文本的形式发送邮件
    15. def make_email_by_text(self,context, subject, from_address, to_address):
    16. message = MIMEText(context, 'plain', 'UTF-8')
    17. message['Subject'] = subject # 邮件标题
    18. message['From'] = Header(from_address, "utf-8") # 邮件主体中发送者名称
    19. message['To'] = Header(to_address, "utf-8") # 邮件主体中接收者名称
    20. self.send_email(message)
    21. # 以文本和附件的形式发送邮件
    22. def make_email_by_att(self,file_path,subject, from_address, to_address):
    23. message = MIMEMultipart()
    24. message['Subject'] = subject # 邮件标题
    25. message['From'] = Header(from_address, "utf-8") # 邮件主体中发送者名称
    26. message['To'] = Header(to_address, "utf-8") # 邮件主体中接收者名称
    27. body = MIMEText('dear all: 测试报告详情请查看附件','plain','utf-8')
    28. message.attach(body)
    29. att_body = open(file_path, 'rb') # 以二进制的格式打开附件
    30. att = MIMEApplication(att_body.read()) # 导入附件
    31. att_body.close()
    32. att.add_header('Content-Disposition','attachment',filename='allure测试报告.pdf') # 添加附件名称
    33. message.attach(att)
    34. self.send_email(message)
    35. # 登录并进行发送
    36. def send_email(self,message):
    37. # 进行登录发送
    38. try:
    39. smtpobj = smtplib.SMTP()
    40. smtpobj.connect(self.mail_host,25)
    41. smtpobj.login(self.mail_user,self.mail_pass)
    42. smtpobj.sendmail(self.sender,self.receivers,message.as_string())
    43. smtpobj.quit()
    44. print('success')
    45. except Exception as e:
    46. print(f'error: {e}')
    47. raise e
    48. if __name__ == '__main__':
    49. pass