原文由wangle发表于TesterHome社区,点击原文链接可与作者间接交换。

一.开启邮箱SMTP服务

发送邮件须要应用SMTP服务器,罕用的收费服务器有:163、126、qq等邮箱。

QQ邮箱配置形式如下:

1) 登录qq邮箱,抉择【设置】-【账户】

2) 在POP3/IMAP/SMAP/Exchage/CardDAV/CalDAV服务中,找到POP3/SMTP服务和IMAP/SMTP服务,点击开启。



163邮箱配置形式如下:

1)注册163邮箱,登录后设置。

2) 在新页面点击“客户端受权明码”,勾选“开启”,弹出新窗口填写手机验证码。

3) 填写受权码

4) 提醒开启胜利。

二、应用python发送邮件

应用python自带的模块:smptlib、email

import smtplibfrom email.mime.text import MIMETextfrom email.header import Header

1、发送一般的邮件

# 发送邮件的步骤import smtplibfrom email.mime.text import MIMEText     # 用来结构文本类型的邮件from email.header import Header          # 用来结构邮件的头部# 第一步:创立一个SMTP的对象s = smtplib.SMTP()# 第二步:连贯到SMTP的服务器host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25port = 25#  host = 'smtp.qq.com'  port = 465  # 设置qq邮箱服务器,端口为:465s.connect(host,port)       # 连贯服务器# s.connect(host = 'smtp.163.com',port = 25)# 第三步:登录SMTP服务器mail_user = '18814726725@163.com'           # 163邮箱的用户名mail_pass = 'password'                      # 留神:此处填写的是邮箱的SMTP服务器受权码s.login(user=mail_user,password=mail_pass)# 第四步:构建邮件内容content = '应用python测试发送邮件'             # 构建邮件内容msg = MIMEText(content,_charset='utf8')     # _charset 指定编码格局msg['Subject'] = Header('测试报告','utf8')   # 邮件主题msg['From'] = 'wl18814726725@163.com'       # 发件人邮箱,可传入列表,用于给多集体发送文件msg['To'] = '1572533878@qq.com'             # 收件人# 第五步:发送邮件s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())     #将邮件内容转换为字符串

2、发送HTML格局邮件及附件

import smtplibfrom email.mime.text import MIMEText     # 文本类型的邮件,用来结构邮件from email.header import Header          # 用来结构邮件的头部from email.mime.application import MIMEApplication   from email.mime.multipart import MIMEMultipart  # 用来结构附件# 发送邮件的步骤# 第一步:创立一个SMTP的对象s = smtplib.SMTP()# 第二步:连贯到SMTP的服务器host = 'smtp.163.com'    # 设置163邮箱服务器,端口为:25port = 25#  host = 'smtp.qq.com'    # 设置qq邮箱服务器,端口为:465s.connect(host,port)   # 连贯服务器# 第三步:登录SMTP服务器mail_user = 'wl18814726725@163.com'     # 163邮箱的用户名mail_pass = 'wl987654321'               # 留神:此处填写的是邮箱的SMTP服务器受权码s.login(user=mail_user,password=mail_pass)# 结构文本邮件内容content = '应用python测试发送邮件'             # 构建邮件内容textcontent = MIMEText(content,_charset='utf8')        # _charset 指定编码格局# 结构附件(二进制字节流模式)part = MIMEApplication(open("report.html",'rb').read(),_subtype=None) # part = MIMEApplication(open("report.html",'rb').read()) 须要查看_subtype=None 是否会引发异样part.add_header('content-disposition', 'attachment', filename='report18.html')  # 对方收到邮件之后,附件在邮件中显示的名称# 封装一封邮件msg = MIMEMultipart()# 退出文本内容msg.attach(textcontent)msg.attach(part)# 发送邮件msg['From'] = 'wl18814726725@163.com'       #发件人邮箱msg['To'] = '1572533878@qq.com'             #收件人#第五步:发送邮件s.sendmail(from_addr='wl18814726725@163.com',to_addrs='1572533878@qq.com',msg=msg.as_string())      # 将邮件内容转换为字符串

3、定义send_email函数

import smtplibfrom email.mime.text import MIMEText     #文本类型的邮件,用来结构邮件from email.header import Header          #用来结构邮件的头部from email.mime.application import MIMEApplicationfrom email.mime.multipart import MIMEMultipart  #用来结构附件def send_email(filepath):    """    :param filepath:   #传入报告文件的门路    :return:    """    # 发送邮件的步骤    # 第一步:创立一个SMTP的对象    s = smtplib.SMTP()    # 第二步:连贯到SMTP的服务器    host = 'smtp.163.com'    #设置163邮箱服务器,端口为:25    port = 25    #  host = 'smtp.qq.com'    #设置qq邮箱服务器,端口为:465    s.connect(host,port)   #连贯服务器    # 第三步:登录SMTP服务器    mail_user = 'wl18814726725@163.com'     #163邮箱的用户名    mail_pass = 'wl987654321'               #留神:此处填写的是邮箱的SMTP服务器受权码    s.login(user=mail_user,password=mail_pass)    #结构文本邮件内容    content = '应用python测试发送邮件'             #构建邮件内容    textcontent = MIMEText(content,_charset='utf8')        #_charset 指定编码格局    #结构附件(二进制字节流模式)    part = MIMEApplication(open(filepath,'rb').read())    part.add_header('content-disposition', 'attachment', filename='report988.html')  #对方收到邮件之后,附件在邮件中显示的名称    # 封装一封邮件    msg = MIMEMultipart()    #退出附件和文本内容    msg.attach(textcontent)    msg.attach(part)    #发送邮件    msg['From'] = 'wl18814726725@163.com'       #发件人邮箱    msg['To'] = '1572533878@qq.com'             #收件人    #第五步:发送邮件    s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())      #将邮件内容转换为字符串send_email('report.html')

4、应用python发送邮件时常见谬误:

谬误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 。

咱们应用python发送邮件时相当于自定义客户端依据用户名和明码登录,而后应用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端受权的(对指定的邮箱巨匠客户端默认开启),因而登录总是被回绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端受权明码-开启(受权码是用于登录第三方邮件客户端的专用明码)。上述有专门的设置办法。

谬误2:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') 。

以163邮箱为例,在开启POP3/SMTP服务,并开启客户端受权明码时会设置受权码,将这个受权码代替smtplib.SMTP().login(user,password)办法中的password即可。

谬误3:给多人发送邮件是,可能会呈现“AttributeError: 'list' object has no attribute 'encode'”或者写了多集体,理论只给第一个人发了邮件等谬误。

# 将所有的收件人邮箱写入到一个字符串中msg['To'] = '1668010021@qq.com, 1572533878@qq.com, wangle@kyee.com.cn, 2685083419@qq.com'# 发送邮件时,通过字符串函数split宰割,宰割后返回的每一个邮箱账号s.sendmail(from_addr=msg['From'], to_addrs=msg['To'].split(','), msg=msg.as_string())
原文由wangle发表于TesterHome社区,点击原文链接可与作者间接交换。

今日份的常识已摄入~
想理解更多前沿测试开发技术:欢送关注「第十届MTSC大会·上海」>>>
1个主会场+12大专场,大咖星散精英齐聚