python发送邮件——smtplib、email模块的基本操作

设计自动化框架时,希望可以直接将运行后的html报告发送给自己,需要用到smtplib模块和email模块,所以就写个小的教程吧。

email模块:负责构建邮件

stmplib模块:负责发送邮件

一、配置163邮箱

自动发送邮件,我们需要一个邮件服务器来支持邮件的发送,所以我们先看下如何设置163邮箱为stmp服务器。

1、登录163邮箱后,选择设置下的“POP3/SMTP/IMAP”

 2、进入设置界面之后,选择开始POP3/SMTP服务,因为我自己已经开启了该服务,所以我截图的界面和你们没开启的界面不一样。不用在意这个差别,直接点击“开启”就行了。开启之后,会要求验证你的短信,之后会生成一个字符串的密钥,这个密钥一定要保存好!!!获取到密钥之后我们第一步就结束了,接下来来看命令具体应该如何来写

二、smtplib模块和email模块部分命令

smtplib:

connect(host, port):链接smtp服务器,第一个参数是服务器地址,第二个参数时服务器端口

login(user,password):登录smtp服务器,第一个参数是登录邮箱用户名,第二个参数是登陆密码,注意此处密码不是指邮箱的真是登录密码,而是在第一步中获取到的那个密钥

sendmail(from_addr, to_addr, msg):第一个参数是发送方的邮箱地址,第二个参数是接收方的邮件地址,第三个参数是邮件的正文

quit():结束当前会话

close():关闭和SMTP服务器的连接

email:

MIMEText(邮件正文,邮件内容格式,编码格式):创建邮件正文的类

发送邮件要遵循邮件发送的规则,即需要有发件人、收件人以及邮件标题,所以我们需要对MIMEText类所创建的对象依次添加内容From、To、Subject

三、发送文本邮件

import smtplib
from email.mime.text import MIMEText
# 发送纯文本格式的邮件,邮件正文一定要是有意义的内容,不然会被163服务器识别为垃圾邮件,无法发送
msg = MIMEText('dear wong,this is the work mail ,if you getted please receive now!!!','plain','utf-8')
#发送邮箱地址
sender = '发件人邮箱'
#邮箱授权码,非登陆密码
password = '授权码'
#收件箱地址
receiver = '收件人邮箱'
#smtp服务器
smtp_server = 'smtp.163.com'
#发送邮箱地址
msg['From'] = sender
#收件箱地址
msg['To'] = receiver
#主题,主题也必须是有意义的内容,否则同样会被识别为垃圾邮件,无法发送
msg['Subject'] = 'new dream reject email'

server = smtplib.SMTP(smtp_server,25)    # SMTP协议默认端口是25
server.login(sender,password)    #ogin()方法用来登录SMTP服务器
server.set_debuglevel(1)    #打印出和SMTP服务器交互的所有信息。
server.sendmail(sender,receiver,msg.as_string())    #msg.as_string()把MIMEText对象变成str server.quit()

发送结果如图

四、发送HTML格式邮件

其实发送html格式的邮件和发送纯文本的格式区别不是很大,只需要修改MIMEText实例化时的入参,第一个参数改为html的源码格式内容,第二个参数改为html即可

因为我自己是用来发送自动化生成的html报告,所以例子就直接写的是怎么讲HTMLTestRunner生成的html报告写入到邮件里面

import smtplib
import time
import unittest
from HTMLTestRunner import HTMLTestRunner
from email.mime.text import MIMEText


class NewDream(unittest.TestCase):
    def test_new(self):
        self.assertTrue(True)
    def test_dream(self):
        self.assertEqual(1, 1)

if __name__ == '__main__':
    # 创建testsuite  测试集合对象
    suite = unittest.TestSuite()
    # 完成测试用例的添加
    # addTest(case类名('test开头的测试方法'))
    suite.addTest(NewDream('test_new'))
    suite.addTest(NewDream('test_dream'))

    # 创建文件流对象
    file_name = time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime(time.time()))     # 根据时间生成了文件名  testfile.txt
    file = open(file_name+".html", "w+", encoding='utf-8')

    # 实例化HTMLTestRunner对象
    runer = HTMLTestRunner(stream=file,
                           title=u"测试登录网页功能的报告生成",
                           description=u"验证下HTMLTestRunner模块的具体使用"
                           )
    runer.run(suite)
    file.seek(0, 0)
    html_content = file.read()
    print("这是文件内容:%s" % html_content)
    # 发送纯文本格式的邮件
    msg = MIMEText("dear sir,\nthis is the test report" + html_content, 'html', 'utf-8')
    # 发送邮箱地址
    sender = '发件人邮箱地址'
    # 邮箱授权码,非登陆密码
    password = '授权码'
    # 收件箱地址
    receiver = '收件人邮箱地址'
    # smtp服务器
    smtp_server = 'smtp.163.com'
    # 发送邮箱地址
    msg['From'] = sender
    # 收件箱地址
    msg['To'] = receiver
    # 主题,需要是一些有实际意义的内容
    msg['Subject'] = 'the auto_test report'

    server = smtplib.SMTP(smtp_server, 25)  # SMTP协议默认端口是25
    server.login(sender, password)  # ogin()方法用来登录SMTP服务器
    server.set_debuglevel(1)  # 打印出和SMTP服务器交互的所有信息。
    server.sendmail(sender, receiver, msg.as_string())  # msg.as_string()把MIMEText对象变成str
    server.quit()

实际效果

 

写在最后,本文只是一些非常简单的模块命令使用,顶多帮你实现邮件的发送,如果相对模块有更深入的学习,建议直接阅读官方文档

 

 

 

超全面的测试IT技术课程,0元立即加入学习!有需要的朋友戳:

腾讯课堂测试技术学习地址

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章