原文由wangle发表于TesterHome社区。1、开启邮箱的SMTP服务。要发送邮件,您需要使用SMTP服务器。常用的免费服务器有:163、126、qq等邮箱。QQ邮箱配置方法如下:1)登录qq邮箱,选择【设置】-【账户】2)在POP3/IMAP/SMAP/Exchange/CardDAV/CalDAV服务中,找到POP3/SMTP服务并IMAP/SMTP服务,点击打开。163邮箱配置方法如下:1)注册163邮箱,登录后设置。2)在新页面点击“客户端授权密码”,勾选“启用”,弹出新窗口填写手机验证码。3)填写授权码4)提示激活成功。2.使用python发送邮件使用python自带的模块:smptlib,emailimportsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader1,发送普通邮件#发送邮件的步骤importsmtplibfromemail.mime.textimportMIMEText#使用来构造atext-typeemailfromemail.headerimportHeader#用于构造邮件的标题#第一步:创建一个SMTP对象s=smtplib.SMTP()#第二步:连接到SMTP服务器host='smtp.163.com'#设置163邮箱服务器,端口为:25port=25#host='smtp.qq.com'port=465#设置qq邮箱服务器,端口为:465s.connect(host,port)#连接Server#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)#Step4:Buildthemailcontentcontent='Usepythontotestsendingmail'#Build邮件内容msg=MIMEText(content,_charset='utf8')#_charset指定编码格式msg['Subject']=Header('TestReport','utf8')#邮件主题msg['From']='wl18814726725@163.com'#发送人的邮箱,可以传入列表,用于给多人发送文件msg['To']='1572533878@qq.com'#Recipient#第五步:发送邮件s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())#将邮件内容转换为字符串2、发送邮件和附件HTML格式importsmtplibfromemail.mime.textimportMIMEText#文本类型的邮件,用于构造邮件fromemail.headerimportHeader#用于构造邮件头fromemail.mime.applicationimportMIMEApplicationfromemail。mime.multipartimportMIMEMultipart#用于构造附件#发送邮件的步骤#第一步:创建SMTP对象s=smtplib.SMTP()#第二步:连接SMTP服务器host='smtp.163.com'#设置163邮箱服务器,端口为:25port=25#host='smtp.qq.com'#设置qq邮箱服务器,端口为:465s.connect(host,port)#连接服务器#第三步:登录toSMTPServermail_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'#Recipient#第五步:发送邮件s.sendmail(from_addr='wl18814726725@163.com',to_addrs='1572533878@qq.com',msg=msg.as_string())#将邮件内容转换为字符串3.定义send_email函数importsmtplibfromemail.mime.textimportMIMEText#文本类型邮件,用于构造Mailfromemail.headerimportHeader#用于构建邮件的头部fromemail.mime.applicationimportMIMEApplicationfromemail.mime.multipartimportMIMEMultipart#用于构建附件defsend_email(filepath):""":paramfilepath:#pass报告文件的路径:return:"""#发送邮件的步骤#第一步:创建一个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测试发送Mail'#构造邮件内容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)#Sendemailmsg['From']='wl18814726725@163.com'#Senderemailmsg['To']='1572533878@qq.com'#Recipient#第五步:发送邮件s.sendmail(from_addr=msg['From'],to_addrs=msg['To'],msg=msg.as_string())#将邮件内容转为字符串send_email('report.html')4.使用python发送邮件常见错误:错误一:smtplib.SMTPAuthenticationError:(550,b'Userhasnopermission')当我们使用python发送邮件时,相当于自定义客户端根据用户名密码登录,然后使用SMTP服务发送邮件.新注册的163邮箱默认是不开通的。由客户端授权(默认为指定邮箱主客户端启用),所以登录总是被拒绝。解决方法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码用于登录第三方邮箱客户端的专用密码)。以上都有专门的设置方法。错误2:smtplib.SMTPAuthenticationError:(535,b'Error:authenticationfailed')。以163邮箱为例,在启用POP3/SMTP服务并启用客户端授权密码时会设置一个授权码,可以用这个授权码代替smtplib.SMTP().login()中的密码用户,密码)方法。错误三:给多人发邮件时,可能会出现“AttributeError:'list'objecthasnoattribute'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个专场,大咖云集,精英云集
