python的邮件发送及配置
SMTPLIB 服务配置
自动化邮件发送的形式来实现邮件的自动发送,是自动化测试过程中对于测试结果的产出方式。一定要将邮件的相关配置信息保存到代码之中。
不同的邮箱所需要的配置内容会有区别。使用时可以去网上查找相关的配置信息。
qq邮箱需要在设置中开启smtp服务并获取授权码,例如:josdonbuhfgaeajj
保存授权码到本地,以便后续使用
各类邮件发送
文本邮件发送
发送纯文本的邮件信息,不包含有任何其他内容
# 定义邮箱的相关信息import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextsender = '2217486972@qq.com'receiver = 'fsd9653@163.com'pass_code = 'josdonbuhfgaeajj'# 连接邮箱服务器conn = smtplib.SMTP_SSL('smtp.qq.com', 465) # qq邮箱的SMTP服务器地址和端口号# 邮件正文content = '这是一封文本格式的测试邮件,希望你国庆快乐'# 将正文放入邮件对象,plain表示文本格式cont = MIMEText(content, 'plain', 'utf-8')# 定义邮件的发件人与收件人cont['from'] = sendercont['to'] = receiver# 定义邮件的标题cont['subject'] = Header('这是一封测试邮件', 'utf-8')# 发送邮件conn.login(sender, pass_code) # 登录邮箱conn.sendmail(sender, receiver, cont.as_string()) # 发送邮件# 关闭连接conn.close()print('邮件发送成功')
### 网页版邮件(HTML格式)
# 定义邮箱的相关信息import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextsender = '2211486979@qq.com'receiver = 'fdd92253@163.com'pass_code = 'josdonbuhfgaeajj'# 连接邮箱服务器conn = smtplib.SMTP_SSL('smtp.qq.com', 465) # qq邮箱的SMTP服务器地址和端口号# 邮件正文content = '''<html><head><meta charset="utf-8"><title>这是一封测试邮件</title></head><body><h1>这是一封测试邮件</h1><p>这是一封测试邮件,希望你国庆快乐</p><a href="https://www.baidu.com">这是一个链接</a></body></html>'''# 将正文放入邮件对象,html表示html格式cont = MIMEText(content, 'html', 'utf-8')# 定义邮件的发件人与收件人cont['from'] = sendercont['to'] = receiver# 定义邮件的标题cont['subject'] = Header('这是一封测试邮件', 'utf-8')# 发送邮件conn.login(sender, pass_code) # 登录邮箱conn.sendmail(sender, receiver, cont.as_string()) # 发送邮件# 关闭连接conn.close()print('邮件发送成功')
带有附件的邮件
需要对附件部分进行额外的代码编写
# 定义邮箱的相关信息
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMETextsender = '221748623279@qq.com'
receiver = 'fdd9623@163.com'
pass_code = 'josdonbuhfgaeajj'# 连接邮箱服务器
conn = smtplib.SMTP_SSL('smtp.qq.com', 465) # qq邮箱的SMTP服务器地址和端口号# 发送带有附件的邮件text = '这是一封测试邮件,希望你国庆快乐'
cont = MIMEText(text, 'plain', 'utf-8')# 定义附件信息
# 添加附件
with open('./2.jpg', 'rb') as f:att = MIMEText(f.read(), 'base64', 'utf-8')att.add_header('Content-Type', 'octet-stream')
att.add_header('Content-Disposition', 'attachment', filename='2.jpg')# 将附件添加到邮件对象
email = MIMEMultipart()# 将附件添加进来
email.attach(att)
email.attach(cont)# 定义邮件的发件人与收件人
email['from'] = sender
email['to'] = receiver
email['subject'] = Header('这是一封测试邮件', 'utf-8')# 发送邮件
conn.login(sender, pass_code)
conn.sendmail(sender, receiver, email.as_string())
conn.quit()# 关闭连接
conn.close()
配置项设置
编写配置文件email_conf.ini:
[Project_fdd]SENDER = 22174863279@qq.comRECEIVER = fdd922653@163.comPASS_CODE = josdonbuhfgaeajj
定义函数获取配置项里的信息,先读取试试,再封装成方法
"""init配置文件读取使用configparser模块读取配置文件"""import configparserimport pathlib# filepath = './email_conf.ini'# # 读取配置文件# conf = configparser.ConfigParser() # 实例化配置文件对象# conf.read(filepath, encoding='utf-8') # 读取配置文件# # 获取配置文件中的内容,并将元组转换为字典# values = dict(conf.items('Project_fdd'))# print(values)## print(values['sender'])# print(values['receiver'])# print(values['pass_code'])# 定义一个函数,用于读取配置文件def read_conf(project_name):# 读取配置文件file = pathlib.Path(__file__).parents[0].resolve() / 'email_conf.ini'conf = configparser.ConfigParser() # 实例化配置文件对象conf.read(file, encoding='utf-8') # 读取配置文件# 获取配置文件中的内容,并将元组转换为字典values = dict(conf.items(project_name))return values最后再编写使用ini配置进行邮件发送的代码:# 定义邮箱的相关信息import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextfrom class10_email.email_read import read_conf# sender = '2217486223979@qq.com'# receiver = 'fdd922653@163.com'# pass_code = 'josdonbuhfgaeajj'data = read_conf('Project_fdd')sender = data['sender']receiver = data['receiver']pass_code = data['pass_code']# 连接邮箱服务器conn = smtplib.SMTP_SSL('smtp.qq.com', 465) # qq邮箱的SMTP服务器地址和端口号# 邮件正文content = '这是一封文本格式的测试邮件,基于ini文件配置的发送邮件,希望你国庆快乐'# 将正文放入邮件对象,plain表示文本格式cont = MIMEText(content, 'plain', 'utf-8')# 定义邮件的发件人与收件人cont['from'] = sendercont['to'] = receiver# 定义邮件的标题cont['subject'] = Header('这是一封测试邮件', 'utf-8')# 发送邮件conn.login(sender, pass_code) # 登录邮箱conn.sendmail(sender, receiver, cont.as_string()) # 发送邮件# 关闭连接conn.close()print('邮件发送成功')
多个接收的成员
smtp库默认无法直接给多人进行邮件发送,如果需要发送多人,需要转为list,sendmail方法是支持收件人为列表的
注意收件人cont['to'] = str(receiver) 这里一定要转成str类型,否则报错
# 定义邮箱的相关信息import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextfrom class10_email.email_read import read_conf# sender = '22174862979@qq.com'# receiver = 'fdd962253@163.com'# pass_code = 'josdonbuhfgaeajj'data = read_conf('Project_fdd')sender = data['sender']receiver = data['receiver'].split(',') # 将字符串转换为列表pass_code = data['pass_code']# 连接邮箱服务器conn = smtplib.SMTP_SSL('smtp.qq.com', 465) # qq邮箱的SMTP服务器地址和端口号# 邮件正文content = '这是一封文本格式的测试邮件,基于ini文件配置的发送邮件,希望你国庆快乐'# 将正文放入邮件对象,plain表示文本格式cont = MIMEText(content, 'plain', 'utf-8')# 定义邮件的发件人与收件人cont['from'] = sendercont['to'] = str(receiver) # 这个只能是str而不能是list,多人时要转成strcont['to'] = ','.join(receiver) # 将列表转换为逗号分隔的字符串# 定义邮件的标题cont['subject'] = Header('这是一封测试邮件', 'utf-8')# 发送邮件conn.login(sender, pass_code) # 登录邮箱conn.sendmail(sender, receiver, cont.as_string()) # 发送邮件# 关闭连接conn.close()print('邮件发送成功')