原文由 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 smtplib
from email.mime.text import MIMEText
from email.header import Header
1、发送一般的邮件
# 发送邮件的步骤
import smtplib
from email.mime.text import MIMEText # 用来结构文本类型的邮件
from email.header import Header # 用来结构邮件的头部
# 第一步:创立一个 SMTP 的对象
s = smtplib.SMTP()
# 第二步:连贯到 SMTP 的服务器
host = 'smtp.163.com' # 设置 163 邮箱服务器,端口为:25
port = 25
# host = 'smtp.qq.com' port = 465 # 设置 qq 邮箱服务器,端口为:465
s.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 smtplib
from 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 邮箱服务器,端口为: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("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 smtplib
from email.mime.text import MIMEText #文本类型的邮件,用来结构邮件
from email.header import Header #用来结构邮件的头部
from email.mime.application import MIMEApplication
from 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 大专场,大咖星散精英齐聚