昨天入职的新人一个Python发送邮件操作很加分

01.纯文本邮件

Python发送邮件

SMTP是发送邮件的协议:
SMTP Simple Mail Transfer Protocol )即简单邮件传输协议 , 它是一组用于由源地址到目的
地址传送邮件的规则,由它来控制信件的中转方式。
Python 内置对 SMTP 的支持,可以发送纯文本邮件、 HTML 邮件以及带附件的邮件。
Python SMTP 支持有 smtplib email 两个模块, email负责构造邮件, smtplib 负责发送邮件。

常见邮箱服务器和端口

163.com:
SMTP 服务器地址 :smtp.163.com (端口: 25
QQ 邮箱:
SMTP 服务器地址: smtp.qq.com (端口: 25
Foxmail
SMTP 服务器地址 :SMTP.foxmail.com (端口: 25

纯文本邮件

一:构建邮件内容
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
第一个参数就是邮件正文
第二个参数是 subtype ,传入 'plain' 表示纯文本, html 表示 html
要用 utf-8 编码保证多语言兼容性。
然后,通过 SMTP 发出去:
二:发送邮件
import smtplib
server = smtplib.SMTP(smtp_server, 25) # SMTP 协议默认端口是 25
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
from_addr: 邮件发送者地址。
to_addrs: 字符串列表,邮件发送地址。
msg: 发送消息
server.quit()

02.添加收件人和主题

添加主题

邮件没有主题;
收件人的名字没有显示为友好的名字,明明收到了邮件,却提示不在收件人中。
这是因为邮件主题、如何显示发件人、收件人等信息并不是通过 SMTP 协议发送,而是包含在发送
的文本中的,
所以,我们必须把 From To Subject 添加到 MIMEText 中,才是一封完整的邮件:
需要通过 Header 对象进行编码
content = MIMEText(' 第二次通过 python 发送邮件 ', 'plain', 'utf-8')
content['From']=Header(sender,'utf-8')
content['To']=receiver
content['Subject']=Header(' 主题是自动化测试 ','utf-8')
发送给多人:
content['To']=receiver # 字符串列表 , 逗号隔开例如 : '1,2'

发送html形式邮件

如果我们要发送 HTML 邮件,而不是普通的纯文本文件怎么办?方法 很简单,在构造MIMEText 对象时,把 HTML 字符串传进去,再把第二 个参数由plain 变为 html 就可以了:
msg = MIMEText('<html><body><h1> 测试报告 </h1>' +
'<p>send by <a
href="http://localhost:63342/HuaceTestFramework/reports/2020-02-21-
21-08-30-interface-report.html?_ijt=qtb4k1nohtrff8pp1hs79glm5l"> 详情
请点击 </a>...</p>' +
'</body></html>', 'html', 'utf-8')

带附件的邮件

from email.mime.multipart import MIMEMultipart
带附件的邮件可以看做包含若干部分的邮件:
文本和各个附件本身
1. 可以构造一个 MIMEMultipart 对象代表邮件本身
2. 然后往里面加上一个 MIMEText 作为邮件正文
3. 再继续往里面加上表示附件
一:添加正文
data = MIMEMultipart()
data.attach(MIMEText('hello', 'plain', 'utf-8')) # 增加邮件正文
data['from'] = Header(sender, 'utf-8')
data['to'] = receiver
data['subject'] = Header(' 包含附件 ', 'utf-8')
'''增加附件,'''
# 通过 open 方法打开一个文件,并且 read (),
att = MIMEText(open(r'./test.html', encoding='utf-8').read())
# 说明该文件以附件形式展示
att["Content-Disposition"] = 'attachment;filename="report.html"'
data.attach(att)

Python连接数据库的目的

1 :清除数据 。自动化测试时候,注册了一个新用户,产生了多余的数据,下次同一个账
号就无法注册了,这种情况怎么办呢?自动化测试都有数据准备和数据清理的操作,如果
因此用例产生了多余数据,就需要清理数据,可以用 Python 连接 Mysql 直接删除多余的数
据就可以了。
2 :进行断言 。自动化测试时,会对某一个测试点的结果进行判断,使用数据库中的数据
来进行判断也是一种常见的断言方式。
环境准备
Python 连接数据库的方法有两种:分别是 PyMySQL mysql.connector
1. PyMySQL
PyMySQL : 是封装了 MySQL 驱动的 Python 驱动,一个能使 Python 连接到 MySQL 的库
环境要求: Python version >= 3.4
安装命令: pip install PyMySQL

DML(数据操纵语言)

pymysql 是利用游标来执行 sql 语句,必须要创建一个游标,并执行 SQL 语句
Python 中对数据库进行增删改使用的是事务处理,和查询不一样,这点需要注意,在执
行增删改 SQL 语句后,需要提交事务才能在数据库中完成操作,并且还需添加错误判断,
当执行 SQL 失败后,需要对事务进行回滚。

 

Python连接数据库

1. 导包 import pymysql
2. 数据库连接设置
conn=pymysql.connect(host,user,passwd,port,db,charset)
3. 生成游标 cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
4. 编写sql 语句 sql='select * from student'
5. 执行sql 语句 cur.excute(sql)
6. 获取数据 data=cur.fetchall()
7. 关闭游标 cur.close()
8. 关闭连接 conn.close()

通过跳板机连接mysql

生产环境中,为了安全起见,大多数的数据库是无法在本地直接访问的,需要先连接跳板机
跳板机是通过密钥连接的,所以需要 ssh_pkey 参数,值是密钥的路径,如果需要通过密码连接,
将该参数换成 ssh_password 即可;
为了安全起见,连接之后再关闭连接,使用 with 语句,如下:
server = SSHTunnelForwarder(
(host_jump, int(port_jump)), # 跳板机的配置
ssh_pkey=ssh_pk_jump,
ssh_username=user_name_jump,
remote_bind_address=(host_mysql, int(port_mysql))) # 数据库服务器的配置
with SSHTunnelForwarder(
(self.ssh_host, 22), # 跳板机(堡垒机) B 配置
ssh_password=self.ssh_password,

需求:excel表格群发邮件

1. 多个 sheet 表格依次发送所有的邮件
2. 每个邮件的内容不一样

微信搜一搜【程序员阿沐】关注这个文绉绉的程序员,关注后主页点击【领取资料】有我准备的一线大厂面试资料和简历模板,希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值