热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3使用SMTP发送邮件

环境:python3,IDE:pycharm非常奇怪的是,用163发送邮件,如果电脑连校园网发送,会被当成垃圾邮件拒绝如果用手机开热点就可以正常发送代码如下

环境:python3 ,IDE : pycharm

非常奇怪的是,用163发送邮件,如果电脑连校园网发送,会被当成垃圾邮件拒绝

如果用手机开热点就可以正常发送

代码如下

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3 import time
 4 import smtplib
 5 from email.mime.text import MIMEText
 6 from email.mime.multipart import MIMEMultipart
 7 
 8 # 第三方 SMTP 服务
 9 mail_host = ""      # SMTP服务器a
10 mail_user = ""                  # 用户名
11 mail_pass = ""               # 授权密码,非登录密码
12 
13 sender = ''    # 发件人邮箱(最好写全, 不然会失败)
14 receivers = ['']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
15 
16 title = '163邮件测试'  # 邮件主题
17 cOntent= '我用Python'
18 
19 def sendEmail():
20     message = MIMEMultipart()
21     message.attach(MIMEText(content, 'plain', 'utf-8'))
22     message['From'] = "{}".format(sender)  # 发件人
23     message['To'] = ",".join(receivers)  # 收件人
24     message['Subject'] = title  # 邮件主题
25 
26     try:
27         smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # 启用SSL发信, 端口一般是465
28         smtpObj.login(mail_user, mail_pass)  # 登录验证
29         smtpObj.sendmail(sender, receivers, message.as_string())  # 发送
30         print("mail has been send successfully.")
31     except smtplib.SMTPException as e:
32         print(e)
33 
34 if __name__ == '__main__':
35     print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
36     sendEmail()
View Code

 

还有就是,针对QQ邮箱的一系列代码,是这次测试的作业,自动生成测试报告,并自动发送添加报告为附件的邮件

简单的软件测试代码 test_job.py:

# -*- coding: utf-8 -*-

import unittest


def sum(a, b):
    return a + b


def sub(a, b):
    return a - b


class TestZuoYe(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print('')

    @classmethod
    def tearDownClass(cls):
        print('')


    def test_Sum(self):
        self.assertEqual(4, sum(3, 1))
        self.assertNotEqual(8, sum(3, 1))

    def test_Sub(self):
        self.assertEqual(2, sub(3, 1))
        self.assertNotEqual(8, sub(3, 1))

if __name__ == '__main__':
    unittest.main()
View Code

然后是发送邮件 sendmail.py:

 1 # -*- coding:utf-8 -*-
 2 
 3 from HTMLTestRunner import HTMLTestRunner
 4 from email import encoders
 5 from email.mime.text import MIMEText
 6 from email.header import Header
 7 from email.mime.multipart import MIMEMultipart
 8 from email.mime.base import MIMEBase
 9 import smtplib
10 import unittest
11 import time
12 import os
13 
14 
15 # 定义发送邮件
16 def send_mail(file_new):
17 
18     msg_from = ''  # 发送方邮箱
19     passwd = ''  # 填入发送方邮箱的授权码
20     msg_to = ''  # 收件人邮箱
21 
22     msg_subject = ""  # 邮件主题
23     msg_cOntent= ""  # 邮件正文
24 
25     msg = MIMEMultipart()
26     # 邮件正文是MIMEText:
27     msg.attach(MIMEText(msg_content, 'plain', 'utf-8'))
28 
29     # # 构造附件,传送当前目录下的 .txt 文件
30     # att1 = MIMEText(open('mybook.txt', 'rb').read(), 'base64', 'utf-8')
31     # att1["Content-Type"] = 'application/octet-stream'
32     # att1["Content-Disposition"] = 'attachment; filename="file1.txt"'
33     # msg.attach(att1)
34 
35     # 添加附件,发送一个 .html文件
36     with open(file_new, 'rb') as f:
37         mime = MIMEBase('html', 'html')
38         # 加上必要的头信息
39         mime.add_header('Content-Disposition', 'attachment', filename=os.path.basename(file_new))
40         mime.add_header('Content-ID', '<0>')
41         mime.add_header('X-Attachment-Id', '0')
42         # 把附件的内容读进来
43         mime.set_payload(f.read())
44         # 用Base64编码
45         encoders.encode_base64(mime)
46         msg.attach(mime)
47 
48     msg['Subject'] = Header(msg_subject, 'utf-8')  # 主题
49     msg['From'] = msg_from
50     msg['To'] = msg_to
51 
52     try:
53         s = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 邮件服务器及端口号
54         s.login(msg_from, passwd)
55         s.sendmail(msg_from, msg_to, msg.as_string())
56         print('发送成功!')
57     except s.SMTPException as e:
58         print("发送失败!")
59     finally:
60         s.quit()
61 
62 
63 # 查找测报告目录,找到最新生成的测试报告文件
64 def new_report(testreport):
65     lists = os.listdir(testreport)
66     lists.sort(key=lambda fn: os.path.getmtime(testreport + "\\" + fn))
67     file_new = os.path.join(testreport, lists[-1])
68     print(file_new)
69     return file_new
70 
71 
72 if __name__ == '__main__':
73     # 测试用例存放位置
74     test_dir = 'E:\ALL_Demo\Py_Demo\Job3\ExamCase'
75     # 测试报告存放位置
76     test_report = 'E:\ALL_Demo\Py_Demo\Job3\ExamReport'
77 
78     discover = unittest.defaultTestLoader.discover(test_dir, 'test_*.py')
79 
80     now = time.strftime("%Y-%m-%d_%H_%M_%S_")
81     filename = test_report + '\\' + now + 'result.html'
82     fp = open(filename, 'wb')
83     runner = HTMLTestRunner(stream=fp,
84                             title='测试报告',
85                             description='用例执行情况:')
86     runner.run(discover)
87     fp.close()
88 
89     new_report = new_report(test_report)
90     send_mail(new_report)  # 发送测试报告
View Code

 


推荐阅读
  • python发送邮件(带附件)、发送给多人、抄送给多人的示例#!usrbinenvpython #-*-encoding:utf-8-*-imports ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 加密要用到Crypto安装包pipinstallCrypto新建两个模块rsautils.py,rsatest.py直接上代码,rsautils.py#!usrbinenv ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
author-avatar
Simon_Diego
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有