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通过post提交数据的方法
May 06 Python
Python中用max()方法求最大值的介绍
May 15 Python
python如何在列表、字典中筛选数据
Mar 19 Python
python3 flask实现文件上传功能
Mar 20 Python
Django时区详解
Jul 24 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
基于python使用tibco ems代码实例
Dec 20 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
python数字类型math库原理解析
Mar 02 Python
在ipython notebook中使用argparse方式
Apr 20 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
详解KMP算法以及python如何实现
Sep 18 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
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
用JavaScript实现动画效果的方法
2013/07/20 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
浅谈python中set使用
2016/06/30 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python实现XML解析的方法解析
2019/11/16 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
优秀班干部事迹材料
2014/01/26 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
合同协议书格式
2014/04/18 职场文书
幼儿园小班评语
2014/04/18 职场文书
环保倡议书400字
2014/05/15 职场文书
回复函范文
2015/07/14 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
python文件目录操作之os模块
2021/05/08 Python
解决Pytorch中关于model.eval的问题
2021/05/22 Python
总结python多进程multiprocessing的相关知识
2021/06/29 Python
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL