python 发送邮件学习

来源:互联网 发布:sql server2008免费版 编辑:程序博客网 时间:2024/05/29 04:29

在学习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 smtplibfrom 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 smtplibfrom email.mime.text import MIMEText #发送文本文件from email.mime.multipart import MIMEMultipart #附件from email.mime.image import MIMEImage #图片from email.utils import formataddrimport osclass 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()

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

原创粉丝点击