zoukankan      html  css  js  c++  java
  • (五十)自动化测试高级应用之自动发邮件功能-发送HTML格式的邮箱

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

    自动发邮件功能

    自动发邮件功能也是自动化测试项目的重要需求之一。例如,我们想在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果。假设生成的测试报告与多人相关,每个人都去测试服务器查看就会比较麻烦,如果把这种主动的且不及时的查看变成被动且即使的查收,就方便多了。

    SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于有源地址到目的地址传送邮件的规则,由它来控制新建的中转方式。

    Pythonsmtplib模块提供了一种很方便的途径用来发送点击邮件。它对SMTP协议进行了简单的封装。我们可以使用SMTP对象的sendmail方法发送邮件,通过help()查看SMTP所提供的方法如下:

    导入SMTP对象,通过help()查看对象的注释,从中找到sendmail()方法的使用说明。

    connect(host,port)方法参数说明如下。

    host:指定链接的邮箱服务器。

    port:指定链接服务器的端口号。

    login(user,password)方法参数说明如下。

    user:登录邮箱用户用。

    password:登录邮箱密码。

    sendmail(from_addr,to_addrs,msg...)方法参数说明如下。

    from_addr:邮件发送者地址。

    to_addrs;字符串列表,邮件发送地址。

    Msg:发送消息。

    quit()方法:用于结束SMTP会话。

    一般我们发邮件有两种方式。方式一:自己邮箱的Web页面(如mail.126.com),输入自己邮箱的用户名和密码登录,打开发邮件页面,填写对方的而邮箱地址及邮件标题与正文,完成后单击发送。方式二:下载安装邮箱客户端(如OutlookFoxmail等),填写邮箱账号、密码及邮箱服务器(如smtp.126.com),一般的邮箱客户端会默认几下这些信息,所以,这个过程只需填写一次,后面发邮件的过程与方法一相同。

    而我们通过PythonSMTP对象发邮件则更像方式二,因为需要填写邮箱服务器。

    当然,在具体发邮件时会涉及诸多需要,例如,邮件正文的格式、是否带图片、邮件是否需要添加附件(及多附件)、邮件是否需要同时向多人发送等。

    发送HTML格式的邮箱

    新建send_mail.py文件

    # !/usr/bin/env python
    # -*- coding: UTF-8 –*-
    __author__ = 'Mr.Li'
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    #发送邮箱服务器
    smtpserver = 'smtp.qq.com'
    #发送邮箱用户/密码
    user = XXXXX@qq.com'
    password = 'XXXXX'
    #发送邮箱
    sender = XXXXX@qq.com'
    #接收邮箱
    receiver = XXXXX@qq.com'
    #发送邮件主题
    subject = 'Python email test'
    
    #编写HTML类型邮件正文
    msg = MIMEText('<thml><h1>你好!</h1></html>','html','utf-8')
    msg['Subject'] = Header(subject,'utf-8')
    
    #链接发送邮件
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(user,password)
    smtp.sendmail(sender,receiver,msg.as_string())
    smtp.quit()

    运行后会报错:

    这是因为这个异常的原因不是你的邮箱密码错误,而是因为你要在smtp第三方客户端登录,需要获得你qq邮箱的授权码,

    也就是说,在password这里你应该填入授权码,而不是你的邮箱密码。那么授权码是什么呢(参考邮箱帮助中心),又如何获得授权码呢?

     http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    #发送邮箱服务器
    smtpserver = 'smtp.qq.com'
    #发送邮箱用户/密码
    user = xxxx@qq.com'
    password = 'mbnzfxlnmwbkbcfb'#这里不能填写邮箱密码而是填写邮箱授权码
    #发送邮箱
    sender = xxxx@qq.com'
    #接收邮箱
    receiver = 'xxxx@qq.com'
    #发送邮件主题
    subject = 'Python email test'
    
    #编写HTML类型邮件正文
    msg = MIMEText('<thml><h1>你好!</h1></html>','html','utf-8')
    msg['Subject'] = Header(subject,'utf-8')
    
    #链接发送邮件
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(user,password)
    smtp.sendmail(sender,receiver,msg.as_string())
    smtp.quit()

    这样运行过后接收邮箱就收到了发送信息。

    本例中,除SMTP模块外,我们还用到了email模块,它主要用来定义邮件的标题和正文:Header()方法用来定义邮件标题;MIMEText()用于定义邮件正文,参数为html格式的文本。登入receive邮箱,查看邮箱内容如下图:

  • 相关阅读:
    《页面优化》-- 一个大话题,也是一个面试比较老俗的问题
    Single-SPA 前端微服务化 动态路由多系统合并
    浏览器的DNS缓存查看和清除
    es6 的类 class
    数据驱动表格| 根据json数据,自动生成合并式table
    隐式调用 以及使用技巧
    柯里化currying + 隐式调用 = 一个有名的add面试题
    工作笔记
    php升级版本
    git使用
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11595843.html
Copyright © 2011-2022 走看看