python3使用SMTP发送邮件
环境:python3 ,IDE : pycharm
非常奇怪的是,用163发送邮件,如果电脑连校园网发送,会被当成垃圾邮件拒绝
如果用手机开热点就可以正常发送
代码如下
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import time
- import smtplib
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- # 第三方 SMTP 服务
- mail_host = "" # SMTP服务器a
- mail_user = "" # 用户名
- mail_pass = "" # 授权密码,非登录密码
- sender = '' # 发件人邮箱(最好写全, 不然会失败)
- receivers = [''] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
- title = '163邮件测试' # 邮件主题
- content = '我用Python'
- def sendEmail():
- message = MIMEMultipart()
- message.attach(MIMEText(content, 'plain', 'utf-8'))
- message['From'] = "{}".format(sender) # 发件人
- message['To'] = ",".join(receivers) # 收件人
- message['Subject'] = title # 邮件主题
- try:
- smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465
- smtpObj.login(mail_user, mail_pass) # 登录验证
- smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
- print("mail has been send successfully.")
- except smtplib.SMTPException as e:
- print(e)
- if __name__ == '__main__':
- print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
- sendEmail()
还有就是,针对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()
然后是发送邮件 sendmail.py:
- # -*- coding:utf-8 -*-
- from HTMLTestRunner import HTMLTestRunner
- from email import encoders
- from email.mime.text import MIMEText
- from email.header import Header
- from email.mime.multipart import MIMEMultipart
- from email.mime.base import MIMEBase
- import smtplib
- import unittest
- import time
- import os
- # 定义发送邮件
- def send_mail(file_new):
- msg_from = '' # 发送方邮箱
- passwd = '' # 填入发送方邮箱的授权码
- msg_to = '' # 收件人邮箱
- msg_subject = "" # 邮件主题
- msg_content = "" # 邮件正文
- msg = MIMEMultipart()
- # 邮件正文是MIMEText:
- msg.attach(MIMEText(msg_content, 'plain', 'utf-8'))
- # # 构造附件,传送当前目录下的 .txt 文件
- # att1 = MIMEText(open('mybook.txt', 'rb').read(), 'base64', 'utf-8')
- # att1["Content-Type"] = 'application/octet-stream'
- # att1["Content-Disposition"] = 'attachment; filename="file1.txt"'
- # msg.attach(att1)
- # 添加附件,发送一个 .html文件
- with open(file_new, 'rb') as f:
- mime = MIMEBase('html', 'html')
- # 加上必要的头信息
- mime.add_header('Content-Disposition', 'attachment', filename=os.path.basename(file_new))
- mime.add_header('Content-ID', '<0>')
- mime.add_header('X-Attachment-Id', '')
- # 把附件的内容读进来
- mime.set_payload(f.read())
- # 用Base64编码
- encoders.encode_base64(mime)
- msg.attach(mime)
- msg['Subject'] = Header(msg_subject, 'utf-8') # 主题
- msg['From'] = msg_from
- msg['To'] = msg_to
- try:
- s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 邮件服务器及端口号
- s.login(msg_from, passwd)
- s.sendmail(msg_from, msg_to, msg.as_string())
- print('发送成功!')
- except s.SMTPException as e:
- print("发送失败!")
- finally:
- s.quit()
- # 查找测报告目录,找到最新生成的测试报告文件
- def new_report(testreport):
- lists = os.listdir(testreport)
- lists.sort(key=lambda fn: os.path.getmtime(testreport + "\\" + fn))
- file_new = os.path.join(testreport, lists[-1])
- print(file_new)
- return file_new
- if __name__ == '__main__':
- # 测试用例存放位置
- test_dir = 'E:\ALL_Demo\Py_Demo\Job3\ExamCase'
- # 测试报告存放位置
- test_report = 'E:\ALL_Demo\Py_Demo\Job3\ExamReport'
- discover = unittest.defaultTestLoader.discover(test_dir, 'test_*.py')
- now = time.strftime("%Y-%m-%d_%H_%M_%S_")
- filename = test_report + '\\' + now + 'result.html'
- fp = open(filename, 'wb')
- runner = HTMLTestRunner(stream=fp,
- title='测试报告',
- description='用例执行情况:')
- runner.run(discover)
- fp.close()
- new_report = new_report(test_report)
- send_mail(new_report) # 发送测试报告
python3使用SMTP发送邮件的更多相关文章
- 【Python3】SMTP发送邮件
犹豫和反复浪费了大量时间. 与朋友言 在完成一个邮件发送程序之前我根本不明白什么是邮件,哪怕已经读过廖雪峰大神的文章,没有贬低大神的意思,大神的博客已经非常的详细, 是我的眼大肚皮小毛病在作祟,由一个 ...
- php用smtp发送邮件
php用smtp发送邮件 1.其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,大家可以去网上下载. 这是一个 ...
- phpmailer,smtp发送邮件实例(转)
一,用phpmailer发送邮件 查看复制打印? <?php include "class.phpmailer.php"; //包函邮件发送类 //邮件发 ...
- python通过SMTP发送邮件失败,报错505/535
python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 我们使用pyth ...
- linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co
https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...
- python大法好——Python SMTP发送邮件
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...
- 运维监控-Zabbix Server 使用QQ SMTP发送邮件报警及定制报警内容
运维监控-Zabbix Server 使用QQ SMTP发送邮件报警及定制报警内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客采用腾讯邮箱,想必大家都对QQ很了解,所以 ...
- gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例)
gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例) 首先祭出官网文档链接:https://docs.gitlab.com/omnibus/settings/smtp.html 其实 ...
- PHP 通过带SSL的SMTP 发送邮件的处理
客户端与SMTP服务器的通讯, 是通过固定的命令以及返回编号完成的. 发送Email, 需要经过的步骤有创建socket (区分带ssl, 还是不带ssl)执行命令, 并检查返回值是否与预期一致, 不 ...
随机推荐
- hibernate hql 语句中 in 的用法
例子描述查询一些班级中的学生 /** * * @param city * @return */ public List<Student> studentList(final Integer ...
- 小米6安装google play
http://bbs.xiaomi.cn/t-13579116 http://m.mk52.cn/jiaocheng/3288.html 步骤: 1.下载需要的文件并解压 (http://techta ...
- [转]2年SQL Server DBA调优方面总结
2年SQL Server DBA调优方面总结 当2年dba 我觉得,有些东西需要和大家分享探讨,先书单. 书单 1.<深入解析SQL Server 2008 系列> 这个就是mssql ...
- Drawing-Order-Of-meshes-and-sprites
Sprite 和 Mesh Render 共存 [CanEditMultipleObjects] [CustomEditor(typeof(MeshRenderer))] public class M ...
- iOS tableView下拉图片放大
事实上这个效果,本质上就是在你tableView下拉 造成offset时候. 保持你顶部图片的y坐标点还停留在下拉时屏幕的顶点(offset), 而图片的长度变为原始的height长度-(offset ...
- Android-RelativeLayout布局技巧(一)
如果有一个需求是这样的,在标题中的右上角有一个button <?xml version="1.0" encoding="utf-8"?> <L ...
- js - 模块化开发的兼容exports的套路
补充:除了第一种的套路,还可以这样使用第二种.都是用来自执行函数的.第二种的好处是,还可以返回一个true. // 常用 ;(function () {})(); // 小技巧(如果不加上!会报错,加 ...
- 1.const
在C++中,const 的含义并没有改变,只是对细节进行了一些调整,以下是最主要的两点. 一.C++中的 const 更像编译阶段的 #define 先来看下面的两条语句: ; int n = m; ...
- 680. Valid Palindrome II【easy】
680. Valid Palindrome II[easy] Given a non-empty string s, you may delete at most one character. Jud ...
- Masonry介绍与使用实践:快速上手Autolayout【转载】
MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 win ...