Python如何基于smtplib发不同格式的邮件


Posted in Python onDecember 30, 2019

这篇文章主要介绍了Python如何基于smtplib发不同格式的邮件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

常用邮箱SMTP、POP3域名及其端口号

发送普通文本内容的邮件

import smtplib
from email.header import Header
from email.mime.text import MIMEText

# smtp服务器信息
smtp_server = 'smtp.163.com'
server_port = 465

# 发送方信息
sender = '发送的邮箱地址'
password = '发送邮箱的smtp授权码'

# 收件人地址,列表可发给多人
receivers = ['123456@qq.com', '3123123@qq.com', '12312@qq.com']

# 邮箱的正文内容,参数分别为内容,格式(plain 为纯文本),编码
msg = MIMEText('Here is content.', 'plain', 'utf-8')

# 邮件头信息
msg['From'] = Header(sender) # 发件人
msg['To'] = Header(', '.join(receivers)) # 发到哪里,参数为字符串
msg['Subject'] = Header('This is subject') # 邮件标题

# 发送邮件的操作
try:
  server = smtplib.SMTP_SSL() # SSL加密传输
  server.connect(smtp_server, server_port) # 连接smtp,服务器和端口
  server.login(sender, password) # 登录发信邮箱
  server.sendmail(sender, receivers, msg.as_string()) # 发送邮件
  server.quit() # 关闭服务器
  print('发送成功')

except smtplib.SMTPException:
  print('发送失败')

发送html格式的邮件

Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html

发送带有附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

import smtplib
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# smtp服务器信息
smtp_server = 'smtp.163.com'
server_port = 465

# 发送方信息
sender = '发送的邮箱地址'
password = '发送邮箱的smtp授权码'

# 收件人地址,列表可发给多人
receivers = ['969831239@qq.com', '124123989@qq.com']

# 实例化,先添加正文内容
msg = MIMEMultipart()
msg.attach(MIMEText('This is content.', 'plain', 'utf-8'))

# 添加附件1
att1 = MIMEApplication(open('tips.py', 'rb').read(), 'utf-8')
att1['Content-Disposition'] = 'attachment; filename="down.py"'  # filename随便起,是接收到的附件显示名称
# att1["Content-Type"] = 'application/octet-stream'  Content-Type默认为application/octet-stream
msg.attach(att1)

# 添加附件2
att2 = MIMEApplication(open('source.jpg', 'rb').read(), 'utf-8')
att2['Content-Disposition'] = 'attachment; filename="girl.jpg"'
msg.attach(att2)

# 邮件头信息
msg['From'] = Header(sender) # 发件人
msg['To'] = Header(', '.join(receivers)) # 发到哪里,参数为字符串
msg['Subject'] = Header('This is subject') # 邮件标题

# 发送邮件的操作
try:
  server = smtplib.SMTP_SSL() # SSL加密传输
  server.connect(smtp_server, server_port) # 连接smtp,服务器和端口
  server.login(sender, password) # 登录发信邮箱
  server.sendmail(sender, receivers, msg.as_string()) # 发送邮件
  server.quit() # 关闭服务器
  print('发送成功')

except smtplib.SMTPException:
  print('发送失败')

发送正文带有图片的邮件

使用html格式的img标签指定图片cid显示图片,图片需要用MIMEImage上传并指定img Content-ID

import smtplib
from email.header import Header
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# smtp服务器信息
smtp_server = 'smtp.qq.com'
server_port = 465

# 发送方信息
sender = '发送的邮箱地址'
password = '发送邮箱的smtp授权码'

# 收件人地址,列表可发给多人
receivers = ['dsaisu@163.com', '76das23021@qq.com', '253das58570@qq.com']

# 实例化,添加正文内容,html格式,<img>标签 指定cid属性的值等于上传图片中Content-ID的值
msg = MIMEMultipart()
msg.attach(MIMEText('<img src="cid:demo" />', 'html', 'utf-8'))  # 与下面的Content-ID的值相同

# 添加图片
img = MIMEImage(open('source.jpg', 'rb').read())
img.add_header('Content-ID', 'demo')  # 与上面的cid相同
msg.attach(img)

# 邮件头信息
msg['From'] = Header(sender) # 发件人
msg['To'] = Header(', '.join(receivers)) # 发到哪里,参数为字符串
msg['Subject'] = Header('This is subject') # 邮件标题

# 发送邮件的操作
try:
  server = smtplib.SMTP_SSL() # SSL加密传输
  server.connect(smtp_server, server_port) # 连接smtp,服务器和端口
  server.login(sender, password) # 登录发信邮箱
  server.sendmail(sender, receivers, msg.as_string()) # 发送邮件
  server.quit() # 关闭服务器
  print('发送成功')

except smtplib.SMTPException:
  print('发送失败')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python对象体系深入分析
Oct 28 Python
简单谈谈python中的Queue与多进程
Aug 25 Python
Python简单获取自身外网IP的方法
Sep 18 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python3学习urllib的使用方法示例
Nov 29 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
django数据库自动重连的方法实例
Jul 21 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 #Python
Python类反射机制使用实例解析
Dec 30 #Python
Python读取YAML文件过程详解
Dec 30 #Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 #Python
pytorch中获取模型input/output shape实例
Dec 30 #Python
Python读取csv文件实例解析
Dec 30 #Python
Pytorch Tensor的统计属性实例讲解
Dec 30 #Python
You might like
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
python3抓取中文网页的方法
2015/07/28 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
Python数据集切分实例
2018/12/08 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
python3 字符串知识点学习笔记
2020/02/08 Python
python datetime处理时间小结
2020/04/16 Python
python 异步async库的使用说明
2020/05/04 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python