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中decorator使用实例
Apr 14 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
在Python中操作字符串之replace()方法的使用
May 19 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
python实现AES加密与解密
Mar 28 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
Python实现中值滤波去噪方式
Dec 18 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
对Python 字典元素进行删除的方法
Jul 31 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 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阳历转农历优化版
2016/08/08 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
微信小程序实现滚动消息通知
2018/02/02 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
python编码最佳实践之总结
2016/02/14 Python
python3 读写文件换行符的方法
2018/04/09 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python 实现视频 图像帧提取
2019/12/10 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
作风年建设汇报材料
2014/08/14 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
欢迎词范文
2015/01/27 职场文书
专项资金申请报告
2015/05/15 职场文书
解除合同协议书范本
2016/03/21 职场文书
导游词之长城八达岭
2019/09/24 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android