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 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
调试Python程序代码的几种方法总结
Apr 28 Python
Python实现截屏的函数
Jul 25 Python
Python中 Lambda表达式全面解析
Nov 28 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
python如何实现异步调用函数执行
Jul 08 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
3种python调用其他脚本的方法
Jan 06 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
python使用scapy模块实现ARP扫描的过程
Jan 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
其他功能
2006/10/09 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
Python-基础-入门 简介
2014/08/09 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
估算杭州有多少软件工程师
2015/08/11 面试题
高三自我鉴定怎么写
2013/10/19 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
出国留学计划书
2014/04/27 职场文书
机房搬迁方案
2014/05/01 职场文书
基层党支部整改方案
2014/10/25 职场文书
公司开业致辞
2015/07/29 职场文书
公司老总年会致辞
2015/07/30 职场文书
学术会议开幕词
2016/03/03 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL