Python(1)自动发送邮件
python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。
smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
1.smtplib模块
import smtplib smtp = smtplib.SMTP()
smtp.connect('smtp.163.com,25')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
2.email模块
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
我们必须把Subject,From,To添加到MIMEText对象或者MIMEMultipart对象中,邮件中才会显示主题,发件人,收件人。
# 组装邮件内容和标题,中文需参数‘utf-8’,单字节字符不需要
msg = MIMEMultipart()
msg['Subject'] = Header(subject)
msg['From'] = sender
msg['To'] = ','.join(user_list)
3.编写发件函数,方便调用
自动化测试报告为HTML,以附件方式发送,
不管什么类型的附件,都可以用MIMEApplication,MIMEApplication默认子类型是application/octet-stream
# 发送html内容的邮件
import smtplib
import time
import os
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart class SendMail():
def find_new_file(self, dir):
'''查找目录下最新的文件'''
file_lists = os.listdir(dir)
file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\\" + fn)
if not os.path.isdir(dir + "\\" + fn)
else 0)
# print('最新的文件为: ' + file_lists[-1])
file = os.path.join(dir, file_lists[-1])
print('完整文件路径:', file)
return file def send_mail_html(self, file):
'''发送html格式测试报告邮件'''
# 发送邮箱
sender = 'name@163.com'
# 接收邮箱
user_list = [
'user@foxmail.com',
'user@qq.com',
'user@qq.com']
# 发送邮件主题
t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
subject = '接口自动化测试结果(请下载附件查看)_' + t
# 发送邮箱服务器
smtpserver = 'smtp.163.com'
# 发送邮箱用户/密码
username = 'user@163.com'
password = 'youer_password'
# 组装邮件内容和标题,中文需参数‘utf-8’,单字节字符不需要
msg = MIMEMultipart()
msg['Subject'] = Header(subject)
msg['From'] = sender
msg['To'] = ','.join(user_list)
# ---这是附件部分---
# html类型附件,不管什么类型的附件,都可以用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。
part = MIMEApplication(open(file, 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=file)
msg.attach(part)
# 登录并发送邮件
try:
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, user_list, msg.as_string())
except BaseException:
print("邮件发送失败!")
else:
print("邮件发送成功!")
finally:
smtp.quit() if __name__ == '__main__':
sen = SendMail()
dir = r'D:\\api\\report' # 指定文件目录
b = sen.find_new_file(dir) # 查找最新的html文件
sen.send_mail_html(b) # 发送html内容邮件
ps:
python邮件发送给多人时,只有第一个人能收到的问题,
MIMEText()["to"]的数据类型与sendmail(from_addrs,to_addrs,...)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型。
expects toaddrs to be a list of email addresses. (Or, of course, just use recipients in place of toaddrs.)
参考链接:https://stackoverflow.com/questions/20509427/python-not-sending-email-to-multiple-addresses
Python(1)自动发送邮件的更多相关文章
- python selenium-7自动发送邮件
https://jingyan.baidu.com/article/647f0115b78f8d7f2148a8e8.html 1.发送HTML格式的邮件 import smtplib from em ...
- python实现自动发送邮件
Python发送邮件成功的前提,应是先开启授权码.目前使用广泛的邮箱有:163邮箱.qq邮箱等. 163邮箱开启授权码的方法如下图: qq邮箱开启授权码的方法如下图: 接下来代码的实现: import ...
- python如何自动发送邮件
#coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.application import ...
- python☞自动发送邮件
一.SMTP 协议 SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式 二.smtplib ...
- 用Python自动发送邮件
用Python自动发送邮件 最近需要在服务器上处理一些耗时比较长的任务,因此想到利用python写一个自动发送邮件的脚本,在任务执行完毕后发送邮件通知我.以下代码以163邮箱为例: 开通163 ...
- python+selenium生成测试报告后自动发送邮件
标签(空格分隔): 自动化测试 运行自动化脚本后,会产生测试报告,而将测试报告自动发送给相关人员,能够让对方及时的了解测试情况,查看测试结果. 整个脚本包括三个部分: 生成测试报告 获取最新的测试报告 ...
- Python 自动发送邮件
简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件.Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器 ...
- 利用Python自动发送邮件
# -*- coding:utf-8 -*-from email.mime.text import MIMETextfrom email.header import Headerimport smtp ...
- python 自动发送邮件遇到的问题
在学习自动化测试高级应用,根据内容写关于自动发送邮件出现了几个问题以及解决办法: 问题1: 代码写好之后,运行的时候,出现如下报错: SMTPAuthenticationError: (550, '\ ...
- Python3.x:定时自动发送邮件
定时自动发送邮件 一.简述 python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email ...
随机推荐
- [bzoj 3701] Olympic Games (莫比乌斯反演)
题目描述 给出n,m,l,r,modn,m,l,r,modn,m,l,r,mod 表示一个(n+1)∗(m+1)(n+1)*(m+1)(n+1)∗(m+1)的格点图,求能够互相看见的点对个数对modm ...
- [SCSS] SASS dynamic class properties
@mixin generateModifers($property) { #{$property}: $padding; &-large { #{$property}: $padding-la ...
- jQuery理解与运用
1. 什么是jQuery 它是一个轻量级的javascript类库,别人写好的一个类. 2. jQuery优点 2.1 总是面向集合 2.2 多行操作集于一行 注1:就一个类“jQuery ...
- python 装饰器之应用示例
import time import hashlib import pickle import threading #装饰函数缓存应用 cache ={} def is_obsolete(entry, ...
- HTML div块内剧中
在HTML中有一个块内元素剧中的方法 那就是margin:0 auto; 剧中前 剧中后
- 动态menu导航条以及treeview树
1.menu表数据 2.在后台生成html内容后,前台利用nav-h.css生成menu导航条,利用Jquery的treeview插件生成menu树 前台coding: <!DOCTYPE ht ...
- vscode搭建springboot开发环境
1. JDK,Maven 1.1 下载略 1.2 设置系统环境变量 jdk增加环境变量JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191(安装路径) 增加路径Pa ...
- decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETU ...
- oracle中时间格式时候的大于号是大于和等于的意思
oracle中时间格式时候的大于号是大于和等于的意思
- sublime的一些常用快捷键总结
下面是四种快捷键类型: 1.编辑类 Ctrl+J 合并选中的多行代码为一行.举个例子:将多行格式的CSS属性合并为一行.Ctrl+Shift+D 复制光标所在整行,插入到下一行.Tab 向右缩进.Sh ...