SMTP发送邮件python

小序一下

  • 公司最近学习氛围真好,功能性测试慢慢也开始转向,自动化测试了,并且一段时间做的是有模有样的,在这里还是给他们点72个即使他们看不见。呵呵,记录一个有意思的事情,证明我们还活着。
  • 爱生活,爱钻研,爱分享,这次是帮助测试实现一个小功能,也就是自动测试完成后生成的测试报告,自动群发公司内部人员
  • 下面进入正题,本次分享是一个很小的功能,不过其中还是有些坑的。

上干货

import smtplib,sys,re
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart

def sendMs():
    smtpserver = 'smtp.163.com'
    username = 'xxxx' #用户名
    password = 'xxx' #密码  这里的密码不是163.com 的登录密码而是,在设置里的授权密码
    msgRoot = MIMEMultipart('related')

    subject = '这是邮件内容'
    msgRoot['Subject'] = subject

    sender = '[email protected]'  # 发件人
    #收件人,这里是用的 “,” 把多个接收邮箱拼接起来
    receiver = '[email protected],[email protected]' 
    receiver_list = receiver.split(',')
    msgRoot['From'] = sender  #之前没有写From和To,发送邮件出现554错误
    #注意:这里接收的是 多个收件人 字符串类型
    msgRoot['To'] = receiver

    # 添加附件就是加上一个MIMEBase,从本地读取一个图片:
    with open('./form.html', 'rb') as f:
        # 设置附件的MIME和文件名,这里是png类型:
        mime = MIMEBase('html', 'png', filename='test.html')
        # 加上必要的头信息:
        mime.add_header('Content-Disposition', 'attachment', filename='test.html')
        mime.add_header('Content-ID', '<0>')
        mime.add_header('X-Attachment-Id', '0')
        # 把附件的内容读进来:
        mime.set_payload(f.read())
        # 用Base64编码:
        encoders.encode_base64(mime)
        # 添加到MIMEMultipart:
        msgRoot.attach(mime)

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
      
    #注意:这里接收的是 多个收件人 数组类型
    smtp.sendmail(sender, receiver_list, msgRoot.as_string())
    smtp.quit()
    print("发送完毕")

if __name__ == '__main__':
    sendMs()

  • 代码量很少,但是有些地方还是需要注意的,代码中我也做了注释
  1. 代码中的密码,是授权密码,这里我列举的是163邮箱,获取授权密码的步骤


    image.png
  2. 此种方式,创建邮件对象,不会报状态 554:垃圾邮件错误
  3. 附件也可增加多个
  4. 注意
    4.1这里接收的是 多个收件人 字符串类型
    msgRoot['To'] = receiver
    4.2 这里接收的是 多个收件人 数组类型
    smtp.sendmail(sender, receiver_list, msgRoot.as_string())

你可能感兴趣的:(SMTP发送邮件python)