python 发送邮件学习

在学习python+selenium框架中,涉及到使用python将测试报告邮件发送,下面学习学习python的邮件模块
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000 廖雪峰老师文章
http://www.runoob.com/python/python-email.html 菜鸟教程
基础知识:SMTP 简单的邮件传输协议,可发送纯文本邮件、HTML邮件以及带附件的邮件,python对SMTP的支持包括有有smtplib和email模块,email负责构造邮件,smtplib负责发送邮件。
构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象
下面就使用我自己的qq邮箱给其他邮箱发邮件
1、首先要在qq邮箱申请一个授权码,百度可以得到申请方法
第一个可以成功发送邮件的程序(使用qq邮箱发送文本文档)

import smtplib
from email.mime.text import MIMEText #发送文本文件
from email.utils import formataddr
# 邮箱地址和口令
sender_addr= '14xxxxx@qq.com' #发件人邮箱
password = 'xxxxxxx'  #这里的密码是申请的授权码
#SMTP服务器地址:
stmp_server ='smtp.qq.com' #qq邮箱SMTP服务器地址
#收件人地址
receive_addr = '1404482005@qq.com'

#创建邮件对象,这里是文本文档邮件对象,三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
msg = MIMEText('send with file..','plain','utf-8')

msg['From'] = formataddr(['111111',sender_addr])#‘111’发件人邮件昵称
msg['To'] = formataddr(['j111',receive_addr])#收件人邮件昵称
msg['Subject'] = "python"   #邮件title、主题
try:
    server = smtplib.SMTP_SSL(stmp_server,465) #qq邮箱SMTP服务器ssl端口号465
    server.set_debuglevel(1) #就可以打印出和SMTP服务器交互的所有信息
    server.login(sender_addr,password) #登录   server.sendmail(sender_addr,receive_addr,msg.as_string()) #发邮件,msg.as_string()把文本内容转化为string
    print('邮箱链接成功')
    server.quit()
except smtplib.SMTPException as e: #异常SMTPException
    print("邮箱链接失败,链接失败原因,%s"%e)

在第一次中遇到一个问题,程序运行可是一直没有发出邮件并结束,smtplib.SMTP_SSL(stmp_server,465) 将这里原来的SMTP修改为SMTP_SSL则成功发出邮件
第二个可以发送文本内容、链接,图片内容和文本附件的邮件程序,且有多个收件人

import smtplib
from email.mime.text import MIMEText #发送文本文件
from email.mime.multipart import MIMEMultipart #附件
from email.mime.image import MIMEImage #图片
from email.utils import formataddr
import os
class Email_Example(object):
    def __init__(self):
        # 输入邮箱地址和口令
        self.sender_addr= 'xxxxx@qq.com'
        self.password = 'xxxxxx'  #授权码
        #输入SMTP服务器地址:
        self.stmp_server ='smtp.qq.com' #qq邮箱SMTP服务器地址
        #收件人地址
        self.receive_addr = ['14xxx@qq.com','1xxxxx@qq.com']#多个收件人就用list
    def set_content(self):
        #创建邮件对象
        self.msgRoot = MIMEMultipart('alternative')
        #设置基本信息
        self.title = 'python email test'
        self.msgRoot['From'] = formataddr(['JQ',self.sender_addr])
        self.msgRoot['To'] = formataddr(self.receive_addr)
        self.msgRoot['Subject'] = self.title   #邮件title
        #设置正文文本内容
        mail_text = 'HELL0'    
        self.msgRoot.attach(MIMEText(mail_text,'plain','utf-8'))
        #设置html格式内容,并把图片嵌入正文文本
        #要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,
        # 然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。
        # 如果有多个图片,给它们依次编号,然后引用不同的cid:x即可
        mail_html ="""
        <p>html内容</p>
        <p><a href="https://www.baidu.com">百度一下</a></p>
        <p><img src="cid:image1"></p>
        """
        self.msgRoot.attach(MIMEText(mail_html,'html','utf-8'))
        #设置图片目录
        file_path =os.path.abspath('.')+r'\1'
        img_path =os.path.abspath('.')+r'\1.png'
        fp = open(img_path, 'rb')
        msgImage = MIMEImage(fp.read())
        fp.close()
        # 定义图片 ID,在 HTML 文本中引用
        msgImage.add_header('Content-ID', '<image1>')#设置图片id
        self.msgRoot.attach(msgImage)

        #多个附件发送(文件)
        for f in os.listdir(file_path):
            print(f)
            path = os.path.join(file_path,f)
            msgFile = MIMEText(open(path).read())
            msgFile["Content-Type"] = 'application/octet-stream'
            msgFile["Content-Disposition"] = 'attachment; filename=' + f
            self.msgRoot.attach(msgFile)

    def mail_send(self):
        try:
            server = smtplib.SMTP_SSL(self.stmp_server,465) #qq邮箱SMTP服务器ssl端口号465
            server.set_debuglevel(1) #就可以打印出和SMTP服务器交互的所有信息
            server.login(self.sender_addr,self.password)
            server.sendmail(self.sender_addr,self.receive_addr,self.msgRoot.as_string()) #把文本内容转化为string
            print('邮箱链接成功')
            server.quit()
        except smtplib.SMTPException as e: #异常SMTPException
            print("邮箱链接失败,链接失败原因,%s"%e)
if __name__ =='__main__':
    email = Email_Example()
    email.set_content()
    email.mail_send()

终于了解了大概的原理,在自动化框架中接着运用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值