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 相关文章推荐
在Django框架中编写Context处理器的方法
Jul 20 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
python与php实现分割文件代码
Mar 06 Python
wxpython实现图书管理系统
Mar 12 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
python实现银行实战系统
Feb 26 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
如何在C++中调用Python
May 21 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编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Python中的变量和作用域详解
2016/07/13 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
为什么相对PHP黑python的更少
2020/06/21 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
主治医师岗位职责
2013/12/10 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
公司端午节活动方案
2014/02/04 职场文书
师范生自我鉴定
2014/03/20 职场文书
安全标语口号
2014/06/09 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
公司回复函格式
2015/07/14 职场文书
2016教师国培研修感言
2015/12/08 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书