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调用fortran模块
Apr 08 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
pip install urllib2不能安装的解决方法
Jun 12 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
新手学python应该下哪个版本
Jun 11 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
Python库安装速度过慢解决方案
Jul 14 Python
区分python中的进程与线程
Aug 13 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
python爬虫之爬取笔趣阁小说
Apr 22 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
javascript中this的四种用法
2015/05/11 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
VUE实现日历组件功能
2017/03/13 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
利用Python实现网络测试的脚本分享
2017/05/26 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
python3 mmh3安装及使用方法
2019/10/09 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
超市中秋节活动方案
2014/02/12 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
企业员工薪酬方案
2014/06/04 职场文书
三严三实对照检查材料
2014/09/22 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP
vue里使用create, mounted调用方法
2022/04/26 Vue.js