打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python发送邮件

参考:https://www.cnblogs.com/yoyoketang/p/7277259.html#4031999

一:发送测试报告给个人(不带附件)

         知识点:

         1、SMTP服务器需要身份验证(端口:465或587)

         2、POP3服务器(端口:995)

         3、先导入smtplib库用来发送邮件

         4、导入MIMEText库用来做纯文本的邮件模板

         ############163邮箱:############

         发件服务器为:smtp.163.com

如果提示163没有授权或者被拦截等信息,可以试着更改163邮箱的设置。然后使用授权码登录

 

import smtplibfrom email.mime.text import MIMEText# ----------1.跟发件相关的参数------smtpserver = "smtp.163.com"            # 发件服务器port = 465                                          # 端口sender = "ljxxx@163.com"                # 账号psw = "xxx"                         # 密码receiver = "lixxxx@163.com"        # 接收人# ----------2.编辑邮件的内容------subject = "这个是主题163"body = '<p>这个是发送的163邮件</p>'  # 定义邮件正文为html格式msg = MIMEText(body, "html", "utf-8")msg['from'] = sendermsg['to'] = receivermsg['subject'] = subject# ----------3.发送邮件------smtp = smtplib.SMTP()                                     #初始化smtp.connect(smtpserver)                                  # 连服务器smtp.login(sender, psw)                                     # 登录smtp.sendmail(sender, receiver, msg.as_string())  # 发送smtp.quit()   

############QQ邮箱:############

         发件服务器为:smtp.163.com

注意:

找到QQ邮箱授权码,打开QQ邮箱-设置-账号-POP3开启服务-开启

(如果已经开启了,不知道授权码,就点温馨提示里面的‘生成授权码’)

收到授权码后复制,保存下来,这个就可以当QQ邮箱的密码了

# coding:utf-8import smtplibfrom email.mime.text import MIMEText# ----------1.跟发件相关的参数------smtpserver = "smtp.qq.com"            # 发件服务器port = 465                                          # 端口sender = "xxxx@qq.com"                # 账号psw = "xxxx"                         # 密码receiver = "lixxxx@163.com"        # 接收人# ----------2.编辑邮件的内容------subject = "这个是主题QQ"body = '<p>这个是发送的QQ邮件</p>'  # 定义邮件正文为html格式msg = MIMEText(body, "html", "utf-8")msg['from'] = sendermsg['to'] = receivermsg['subject'] = subject# ----------3.发送邮件------smtp = smtplib.SMTP_SSL(smtpserver, port)smtp.login(sender, psw)                                      # 登录smtp.sendmail(sender, receiver, msg.as_string())  # 发送smtp.quit()                                                        # 关闭                                               # 关闭

 

二:兼容163和QQ邮箱,不带附件

需要改动的是底单部分发送邮件那块

try:    smtp = smtplib.SMTP_SSL(smtpserver, port)   #QQ邮箱except:    smtp = smtplib.SMTP()                       #163邮箱    smtp.connect(smtpserver, port)              #链接服务器# 用户名密码smtp.login(sender, psw)                         #登录smtp.sendmail(sender, receiver, msg.as_string())#发送smtp.quit()                                     #关闭

 

三:发送测试报告给单个人,兼容163和QQ邮箱,带附件

3.1上面的MIMEText只能发送正文,无法带附件,发送带附件的需要导入另外一个模块MIMEMultipart

3.2先读取要发送文件的内容,file_path是路径的参数名

3.3. file_name参数是发送的附件重新命名

# coding:utf-8import osimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipart# -----相关路径-----#父目录:os.path.dirname(所在目录:os.path.dirname(绝对路径:os.path.realpath(__file__)))cur_path = os.path.dirname(os.path.realpath(__file__))  #当前文件存在的路径case_path = os.path.join(cur_path, 'test_case')         #测试case目录report_path = os.path.join(cur_path, 'report')          #测试报告存放目录# ----------1.跟发件相关的参数------smtpserver = "smtp.qq.com"           # 发件服务器port = 465                                           # 端口sender = "xxx@qq.com"               # 账号psw = "xxxx"                             # 密码receiver = "xxxx0@163.com"        # 接收人# ----------2.编辑邮件的内容------# 读文件file_path = report_path   r"\result.html"with open(file_path, "rb") as f:    mail_body = f.read()msg = MIMEMultipart()msg["from"] = sender                             # 发件人msg["to"] = receiver                               # 收件人msg["subject"] = "这个我的主题"             # 主题# 正文body = MIMEText(mail_body, "html", "utf-8")msg.attach(body)# 附件att = MIMEText(mail_body, "base64", "utf-8")att["Content-Type"] = "application/octet-stream"att["Content-Disposition"] = 'attachment; filename="test_report.html"'    #附件名字filename需要和实际发送的文件名字一样哦msg.attach(att)# ----------3.发送邮件------try:    smtp = smtplib.SMTP_SSL(smtpserver, port)  # QQ邮箱except:    smtp = smtplib.SMTP()  # 163邮箱    smtp.connect(smtpserver, port)  # 链接服务器# 用户名密码smtp.login(sender, psw)  # 登录smtp.sendmail(sender, receiver, msg.as_string())  # 发送smtp.quit()  # 关闭

 

四:发送测试报告给多个人,兼容163和QQ邮箱,带附件

1.上面都是发给一个收件人,那么如何一次发给多个收件人呢?只需改两个小地方

2.把receiver参数改成list对象,单个多个都是可以收到的

3.msg["to"]这个参数不能用list了,得先把receiver参数转化成字符串,如下图所示

 

# coding:utf-8import osimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipart# -----相关路径-----#父目录:os.path.dirname(所在目录:os.path.dirname(绝对路径:os.path.realpath(__file__)))cur_path = os.path.dirname(os.path.realpath(__file__))  #当前文件存在的路径case_path = os.path.join(cur_path, 'test_case')         #测试case目录report_path = os.path.join(cur_path, 'report')          #测试报告存放目录# ----------1.跟发件相关的参数------smtpserver = "smtp.qq.com"           # 发件服务器port = 465                                           # 端口sender = "xxxx@qq.com"               # 账号psw = "xxxxx"                             # 密码# receiver = "xxxxx@163.com"        # 接收人receiver = ["xxxx@163.com", "xxxx0@126.com"]   # 多个收件人list对象# ----------2.编辑邮件的内容------# 读文件file_path = report_path   r"\result.html"with open(file_path, "rb") as f:    mail_body = f.read()msg = MIMEMultipart()msg["subject"] = "这个我的主题多人"             # 主题msg["from"] = sender                             # 发件人# msg["to"] = receiver                               # 收件人msg["to"] = ";".join(receiver)             # 多个收件人list转str# 正文body = MIMEText(mail_body, "html", "utf-8")msg.attach(body)# 附件att = MIMEText(mail_body, "base64", "utf-8")att["Content-Type"] = "application/octet-stream"att["Content-Disposition"] = 'attachment; filename="test_report.html"'    #附件名字filename需要和实际发送的文件名字一样哦msg.attach(att)# ----------3.发送邮件------try:    smtp = smtplib.SMTP_SSL(smtpserver, port)  # QQ邮箱except:    smtp = smtplib.SMTP()  # 163邮箱    smtp.connect(smtpserver, port)  # 链接服务器# 用户名密码smtp.login(sender, psw)  # 登录smtp.sendmail(sender, receiver, msg.as_string())  # 发送smtp.quit()  # 关闭

 

五:发送测试报告给多个人,兼容163和QQ邮箱,带附件。从配置表读取信息

         ###############lj##################

[email]smtp_server = smtp.qq.comport = 465sender = xxxxx@qq.compsw = xxxx[receiver]lj = xxxxx.comlj1 = xxxxx.com

#############read.py############# 

import osimport configparsercur_path = os.path.dirname(os.path.realpath(__file__))   #获取当前文件所在路径configPath = os.path.join(cur_path, "lj")  #拼接出文件路径conf = configparser.ConfigParser()conf.read(configPath)  #读取配置文件lj.ini# 获取指定的section, 指定的option的值smtp_server = conf.get("email", "smtp_server")sender = conf.get("email", "sender")psw = conf.get("email", "psw")port = conf.get("email", "port")receiver1 = conf.items('receiver')receiver = list()for i in range(len(receiver1)):    y = receiver1[i][-1]    receiver.append(y)

#############run3.py############# 

import osimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipart# 父目录:os.path.dirname(所在目录:os.path.dirname(绝对路径:os.path.realpath(__file__)))cur_path = os.path.dirname(os.path.realpath(__file__))  #当前文件存在的路径case_path = os.path.join(cur_path, 'test_case')         #测试case目录report_path = os.path.join(cur_path, 'report')          #测试报告存放目录def send_mail(sender, psw, receiver, smtpserver, port):    '''第三步:发送最新的测试报告内容'''    #读文件    file_path = report_path   r"\result.html"    with open(file_path, "rb") as f:        mail_body = f.read()    # 定义邮件内容    msg = MIMEMultipart()    msg['Subject'] = u"duoren"  #主题    msg["from"] = sender     #发件人    # msg["to"] = receiver      #收件人    msg['to'] = ",".join(receiver)    #正文    body = MIMEText(mail_body, _subtype='html', _charset='utf-8')    msg.attach(body)    # 添加附件    att = MIMEText(mail_body, "base64", "utf-8")    att["Content-Type"] = "application/octet-stream"    att["Content-Disposition"] = 'attachment; filename= "report.html"'    msg.attach(att)    try:        smtp = smtplib.SMTP_SSL(smtpserver, port)   #QQ邮箱    except:        smtp = smtplib.SMTP()                       #163邮箱        smtp.connect(smtpserver, port)              #链接服务器    # 用户名密码    smtp.login(sender, psw)                         #登录    smtp.sendmail(sender, receiver, msg.as_string())#发送    smtp.quit()                                     #关闭    print('test report email has send out !')if __name__ == "__main__":    # 邮箱配置    from config import read    sender = read.sender    psw = read.psw    smtp_server = read.smtp_server    port = read.port    receiver = read.receiver    # print(sender, psw, smtp_server, port, receiver1)    send_mail(sender, psw, receiver, smtp_server, port)  # 发送报告

 

欢迎指正

 

来源:http://www.icode9.com/content-1-31351.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
python笔记3
9款最佳Python脚本:让工作自动化起来!(上)
20个日常工作常用的Python脚本
Python3 SMTP发送邮件 | 菜鸟教程
python3使用smtplib通过qq邮箱发送邮件ok
定时执行任务并发送邮件通知脚本
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服