当前位置: 首页 > 编程日记 > 正文

使用Python3发送邮件测试代码

SMTP(Simple Mail Trasfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,用它来控制信件的中转方式。Python3对SMTP的支持有smtplib和email两个模块,smtplib负责发送电子邮件, email负责组织邮件内容,可发送的邮件形式包括:纯文本文件、html、附件、图像。

下面的测试代码是以给163发送邮件为例,获取163的授权码方式可以参考:https://jingyan.baidu.com/article/ce09321b862ed12bff858fd9.html

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header# reference: http://www.runoob.com/python/python-email.html# 第三方SMTP服务, 如163, qq, sina
mail_host = "smtp.163.com" # 设置服务器
mail_port = 25 # 端口号
mail_user = "fengbingchun" # 用户名
mail_pass = "xxxxx" # 163授权码sender = "fengbingchun@163.com" # 发送方
receivers = ["fengbingchun@163.com"] # 接收方def SendTextMessage(text):''' 发送纯文本邮件, text: 邮件内容 ''' # 三个参数:第一个为文本内容,第二个plain设置文本格式,第三个utf-8设置编码message = MIMEText(text, 'plain', 'utf-8') # 邮件内容message['From'] = Header("菜鸟教程", 'utf-8') # 发送者message['To'] =  Header("测试", 'utf-8') # 接收者subject = 'Python SMTP 邮件测试: plain text' # 邮件主题message['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP()smtpObj.connect(mail_host, mail_port)smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功: plain text")except smtplib.SMTPException:print("Error: 无法发送邮件, plain text")def SendHtmlMessage():''' 发送html邮件 '''mail_msg = """<p>Python 邮件发送测试: this is a html email</p><p><a href="http://www.runoob.com">这是一个链接</a></p>"""message = MIMEText(mail_msg, 'html', 'utf-8')message['From'] = Header("菜鸟教程", 'utf-8')message['To'] =  Header("测试", 'utf-8')subject = 'Python SMTP 邮件测试: html'message['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP()smtpObj.connect(mail_host, mail_port)smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功: html")except smtplib.SMTPException:print("Error: 无法发送邮件, html")def SendAttachmentMessage():''' 发送带附件的邮件 '''message = MIMEMultipart()message['From'] = Header("菜鸟教程", 'utf-8')message['To'] =  Header("测试", 'utf-8')subject = 'Python SMTP 邮件测试: attachment'message['Subject'] = Header(subject, 'utf-8')# 邮件正文内容message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试: attachment', 'plain', 'utf-8'))# 构造附件1,传送当前目录下的 test.txt 文件att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')att1["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字att1["Content-Disposition"] = 'attachment; filename="test.txt"'message.attach(att1)# 构造附件2,传送当前目录下的 runoob.txt 文件att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf-8')att2["Content-Type"] = 'application/octet-stream'att2["Content-Disposition"] = 'attachment; filename="runoob.txt"'message.attach(att2)try:smtpObj = smtplib.SMTP()smtpObj.connect(mail_host, mail_port)smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功: attachment")except smtplib.SMTPException:print("Error: 无法发送邮件: attachment")def SendHtmlImageMessage():''' 发送带html+image的邮件 '''msgRoot = MIMEMultipart('related')msgRoot['From'] = Header("菜鸟教程", 'utf-8')msgRoot['To'] =  Header("测试", 'utf-8')subject = 'Python SMTP 邮件测试: html+image'msgRoot['Subject'] = Header(subject, 'utf-8')msgAlternative = MIMEMultipart('alternative')msgRoot.attach(msgAlternative)mail_msg = """<p>Python 邮件发送测试: html+image</p><p><a href="http://www.runoob.com">菜鸟教程链接</a></p><p>图片演示:</p><p><img src="cid:image1"></p>"""msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))# 指定图片为当前目录fp = open('test.png', 'rb')msgImage = MIMEImage(fp.read())fp.close()# 定义图片 ID,在 HTML 文本中引用msgImage.add_header('Content-ID', '<image1>')msgRoot.attach(msgImage)try:smtpObj = smtplib.SMTP()smtpObj.connect(mail_host, mail_port)smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, msgRoot.as_string())print("邮件发送成功: html+image")except smtplib.SMTPException:print("Error: 无法发送邮件: html+image")if __name__ == "__main__":SendTextMessage("Hello, Python 邮件发送测试: this is a plain text email!")SendHtmlMessage()SendAttachmentMessage()SendHtmlImageMessage()	print("finish")

执行结果如下:

收到的邮件结果如下:

GitHub:https://github.com/fengbingchun/Python_Test

相关文章:

swift 通知中心 进入后台多久会通知用户关闭此功能

//添加本地通知 func addLocalNotification() { //定义本地通知对象 let notification : UILocalNotification UILocalNotification() //设置调用时间 notification.fireDate NSDate.init(timeIntervalSinceNow: 1800.0)//通知触发的时间&#xff0c;10s以后 notification.…

Python之父退休,C语言之父与世长辞,各大编程语言创始人现状盘点

作者 | 年素清 编辑 | 伍杏玲 来源 | 程序人生&#xff08;ID&#xff1a;coder_life&#xff09;从世界上第一台计算机(ENIAC) 于1946年2月在美国诞生至今的七十多年里&#xff0c;涌现出了许多优秀的计算机编程语言。程序员们在使用它们编写程序的时候&#xff0c;一定很好奇…

linux修正系统错误指令fsck和badblocks

fsck [-t文件系统][-ACay]装置名称-t 指定文件系统-A 扫描需要的装置-a 自动修复检查到有问题的扇区-y 与-a类似-C 在检查过程中&#xff0c;显示进度********************************************************** EXT2/EXT3额外选项功能&#xff1a;-f 强制检查-D 针对文件系…

Ubuntu定时任务crontab命令介绍

通过Linux上的crontab命令&#xff0c;我们可以在规定的间隔时间执行指定的系统指令或脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。 crontab默认在Ubuntu上是已经安装的&#xff0c;若未安装&#xff0c;则可执行以下命令进行安装&#xff1a; sudo …

swift 进入后台或者点击home键是程序进入后台后,持续定位

进入后台的方法 import UIKit UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate,CLLocationManagerDelegate { var locationManager : CLLocationManager? var window: UIWindow? var notificationDict NSDictionary() func applicationDidEnterBa…

求助:我有一辆机器人小车,怎么让它跑起来,还会避障、目标跟踪、路径规划?...

也许&#xff0c;你曾见过能灵活地绕开障碍物的它在桌子边缘“疯狂试探”的它它是谁&#xff1f;没错&#xff0c;它就是是英伟达推出的一款入门级人工智能小车——Jetbot &#xff0c;估计对机器人&#xff0c;尤其是对车械感兴趣的朋友们一定对它不陌生。组装完成后能够通过摄…

Python-常用字符串转换实例

当字符串是&#xff1a;\u4e2d\u56fd >>>s[\u4e2d\u56fd,\u6e05\u534e\u5927\u5b66]>>>strs[0].decode(unicode_escape) #.encode("EUC_KR")>>>print str 中国 当字符串是: >>>print unichr(19996) 东 ord()支持unicode&…

什么是静态UItableView

iOS开发UI篇—简单介绍静态单元格的使用 iOS开发UI篇—简单介绍静态单元格的使用 一、实现效果与说明 说明&#xff1a;观察上面的展示效果&#xff0c;可以发现整个界面是由一个tableview来展示的&#xff0c;上面的数据都是固定的&#xff0c;且几乎不会改变。 要完成上面的…

Python3中PyMongo使用举例

MongoDB是一个基于分布式文件存储的开源数据库&#xff0c;由C语言编写&#xff0c;与平台无关&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库中功能最丰富&#xff0c;最像关…

PyTorch踩过的12坑 | CSDN博文精选

作者 | hyk_1996 来源 | CSDN博客1. nn.Module.cuda() 和 Tensor.cuda() 的作用效果差异无论是对于模型还是数据&#xff0c;cuda()函数都能实现从CPU到GPU的内存迁移&#xff0c;但是他们的作用效果有所不同。对于nn.Module:model model.cuda() model.cuda() 上面两句能够达到…

解决ubuntu14.04下Qt 5.3.1下的QtCreator fcitx,ibus不能输入中文

2019独角兽企业重金招聘Python工程师标准>>> ubuntu 14.04从Qt官网下载的最新版qt&#xff0c;安装过程很顺利&#xff0c;但却发现没办法输入中文&#xff08;我用的是 fcitx), 即使下载了fcitx-frontend-qt5和fcitx-frontend-qt4也还是没用。 想必是qt版本的原因吧…

实战:基于技术分析的Python算法交易

译者 | Tianyu 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文是用 Python 做交易策略回测系列文章的第四篇。上个部分介绍了以下几个方面内容&#xff1a;介绍了 zipline 回测框架&#xff0c;并展示了如何回测基本的策略导入自定义的数据并使用 zipline评估交…

深度学习中的Dropout简介及实现

在训练神经网络模型时候&#xff0c;如果模型相对复杂即参数较多而训练样本相对较少&#xff0c;这时候训练出的模型可能对训练集中的数据拟合的比较好&#xff0c;但在测试集上的表现较差&#xff0c;即出现了过拟合的情况。这种情况下可以使用Dropout来降低过拟合的可能性进而…

swift中字符串截取方法(substring)

下面介绍2种swift的字符串截取方法,实际上用到了substringFromIndex,substringToIndex,substringWithRange 1.将String转化为NSString再截取,代码如下&#xff1a; var s"1234567890"var ns1(s as NSString).substringFromIndex(5) var ns2(s as NSString).substrin…

设置IE兼容模式

文件兼容性用于定义让IE如何编译你的网页。此文件解释文件兼容性&#xff0c;如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式。 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观&#xff0c;IE8引入了文件兼容性。在IE6中引入一个增设的兼容…

程序员的自我修养--链接、装载与库笔记:静态链接

1. 空间与地址分配 对于链接器来说,整个链接过程中,它就是将几个输入目标文件加工后合并成一个输出文件。测试代码a.c和b.c内容如下&#xff1a; // a.c extern int shared;int main() {int a 100;swap(&a, &shared); } // b.c int shared 1;void swap(int* a, in…

开启JAVA自学新篇章

MyEclipse Enterprise Workbench简称MyEclipse&#xff0c;是一款专门用于开发Java, J2EE的 Eclipse 插件集合&#xff0c;该软件不仅功能丰富而且强大&#xff0c;包括了完备的编码、调试、测试和发布功能&#xff0c;利用它我们可以在数据库和JavaEE的开发、发布以及应用程序…

12306系统的秒杀“艺术”:如何抗住100万人同时抢1万张票?

作者 | IT牧场 编辑 | 阿秃每到节假日期间&#xff0c;一二线城市返乡、外出游玩的人们几乎都面临着一个问题——抢火车票。虽然现在大多数情况下都能订到票&#xff0c;但是放票瞬间即无票的场景&#xff0c;相信大家都深有体会。尤其是春节期间&#xff0c;大家不仅使用 1230…

C#不错的扩展工具类

FSLibExtension.NET https://github.com/iccfish/FSLib.Extension WebEssentials2013 https://github.com/iccfish/WebEssentials2013

自己写的程序密码功能 ------数字功能

自己写的程序密码功能 ------数字功能 class LockedViewController: UIViewController { var dataBase:FMDatabase? var i 0 var passwordStr : String? var tempStr : String "" var numStr : String "" //初始输入密码 var reNumStr : String &…

程序员的自我修养--链接、装载与库笔记:Windows PE/COFF

1. Windows的二进制文件格式PE/COFF 在32位Windows平台下&#xff0c;微软引入了一种叫PE(Portable Executable)的可执行格式。作为Win32平台的标准可执行文件格式&#xff0c;PE有着跟ELF一样良好的平台扩展性和灵活性。PE文件格式事实上与ELF同根同源&#xff0c;它们都是由…

神州数码与神州控股、神州信息共同主办首届技术年会,透露出什么信号?

11 月 8 日&#xff0c;神州控股、神州数码集团、神州信息共同主办“数字中国 2019 技术年会”&#xff0c;聚焦云计算、大数据、人工智能、区块链、5G 等前沿技术创新与应用实践&#xff0c;众多领域的技术专家展开了深度交流&#xff0c;共同探讨数字时代的技术创新与协同发展…

osi七层协议和tcp/ip四层协议

&#xff08;大部分内容为转载&#xff09;OSI&#xff08;Open System Interconnection&#xff09;是一个开放性的通行系统互连参考模型&#xff0c;他是一个定义的非常好的协议规范&#xff0c;共包含七层协议。OSI七层协议是由ISO (International Standards Organization)在…

Swift中页面跳转与传值:

1.简单方式 首先&#xff0c;Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法&#xff0c;我这里选择使用storyboard的界面跳转方法。 1、通过在storyboard中拉button控件建立segue跳转。 2、通过presentViewController方法进行界面跳转。 这里需要注意presentV…

知乎热议!学完Python之后,我的编程能力竟然退化了!

在知乎上有一个特别火的问题&#xff1a;如何学Python&#xff1f;你会看到很多高赞回答是&#xff1a;我一天就学完了。在大家群嘲的背后&#xff0c;我们来分析一下&#xff0c;为什么在已经学过的人眼里&#xff0c;Python这么容易学&#xff0c;甚至简单到被某些人鄙视呢&a…

libjpeg-turbo介绍及测试代码

很多年之前在https://blog.csdn.net/fengbingchun/article/details/10171583 中简单介绍过libjpeg-turbo的安装&#xff0c;因为libjpeg-turbo一直在维护更新&#xff0c;较之前有了些变化&#xff0c;这里再次整理下&#xff0c;并增加更多的测试代码。 libjpeg-turbo的主页为…

高级特性-多线程,GUI

2019独角兽企业重金招聘Python工程师标准>>> 创建线程两种方式第一种&#xff0c;导入improt thread 模块&#xff0c;thread.start_new_thread(功能函数名称&#xff0c;(参数1&#xff0c;参数2...)) 后面参数为功能函数的参数第二个方式类似于java&#xff0c;导…

Hulu视频如何提升推荐多样性?

作者 | 余沾 整理 | 深度传送门&#xff08;ID: deep_deliver&#xff09;导读&#xff1a;本文主要介绍Hulu在NIPS 2018上发表的《Fast Greedy MAP Inference for Determinantal Point Process to Improve Recommendation Diversity》中&#xff0c;提出的DPP算法解决视频推荐…

UITextField长度限制的写法

1.遵循代理 UITextFieldDelegate 2.点击响应方法 userNameText.addTarget(self, action: "tappedOne:", forControlEvents: UIControlEvents.EditingChanged) 3.方法的实现 func tappedOne(textField: UITextField) { textField.text textField.text?.uppercaseS…

通过Python在Windows或Linux上快速搭建HTTP服务器

在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器。 如果python为2.x&#xff0c;则可执行&#xff1a;$ python -m SimpleHTTPServer 或 $ python2 -m SimpleHTTPServer 如果python为3.x&#xff0c;则可执行&#xff1a;$ python -m h…