一、邮件分析

此处发送邮件使用smtplib模块,不用下载,pycharm自带的有此模块。
我们通过实例化 smtplib 模块的 SMTP 对象 smtpObj 来连接到 SMTP 访问,并使用 sendmail 方法来发送信息。语法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

参数说明:
from_addr: 邮件发送者地址。
to_addrs: 字符串列表,邮件发送地址。
msg: 发送消息
这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

邮件有发送方sender、接收方receivers。一个邮件有需要三个头部信息: From, To, 和 Subject ,每个信息直接使用空行分割。

二、发送纯文本邮件

代码如下:
第一种

import smtplib
from email.mime.text import MIMEText
from email.header import Headermessage = MIMEText('我来验证!')   # 邮件内容
message['From'] = Header('小爱')   # 邮件发送者名字
message['To'] = Header('小蓝枣')   # 邮件接收者名字
message['Subject'] = Header('来自异世界的一封信!')   # 邮件主题mail = smtplib.SMTP()
mail.connect("smtp.qq.com")   # 连接 qq 邮箱
mail.login("接收方邮箱@qq.com", "授权码")   # 账号和授权码
mail.sendmail("发送方邮箱@qq.com", ["接收方邮箱@qq.com"], message.as_string())   # 发送账号、接收账号和邮件信息

关于授权码的问题,需要网上登录qq邮箱,设置中进入自己账户,打开SMIP服务。


黄色的消息框中有生成授权码,需要向腾讯科技发个信息来验证一下,再运行代码,即可收到短信。

第二种
和第一种几乎一样。

import smtplib
from email.mime.text import MIMEText
from email.header import Headersender = '发送方邮箱@qq.com'
receivers = ['接收方邮箱@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('再验证一下SMIP模块', 'plain', 'utf-8')
message['From'] = Header("张", 'utf-8')  # 发送者
message['To'] = Header("艳", 'utf-8')  # 接收者subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP()smtpObj.connect("smtp.qq.com")  #连接qq邮箱smtpObj.login("接收方邮箱@qq.com", "cyxacyjvmrtxcjbe")  # 账号和授权码smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功")
except smtplib.SMTPException:print("Error: 无法发送邮件")

结果运行成功。

最终手机上收到了两份邮件。

三、发送html格式邮件

注意修改语句message = MIMEText(mail_msg, 'html', 'utf-8'),传输的是html文件。代码如下:

import smtplib
from email.mime.text import MIMEText
from email.header import Headersender = '发送方邮箱@qq.com'
receivers = ['接收方邮箱@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱# mail_msg是用html编写的内容,图片也用html格式,和链接放一起进行发送
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
"""
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText(mail_msg, 'html', 'utf-8')     #邮件正文内容,修改plain为html
message['From'] = Header("张", 'utf-8')  # 发送者
message['To'] = Header("艳", 'utf-8')  # 接收者subject = 'Python SMTP 发送html格式邮件测试'
message['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP()smtpObj.connect("smtp.qq.com")  #连接qq邮箱smtpObj.login("接收方邮箱@qq.com", "udfhrmjpxyhcdbbf")  # 账号和授权码smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功")
except smtplib.SMTPException:print("Error: 无法发送邮件")

四、发送html链接加附件邮件

传递两个附件,第一个是txt文件,第二个是png图片。先把png图片放到运行项目文件路径下。

利用MIMEMultipart()作附件对象。
代码如下:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Headersender = '发送方邮箱@qq.com'
receivers = ['接收方邮箱@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("张", 'utf-8')
message['To'] = Header("艳", 'utf-8')
subject = 'Python SMTP html格式加附件邮件测试'
message['Subject'] = Header(subject, 'utf-8')# 邮件正文内容
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
"""
message.attach(MIMEText(mail_msg, 'html', 'utf-8'))# 构造附件1,传送当前目录下的 test.txt 文件
a=open('zy5.txt', 'rb').read()
att1 = MIMEText(a, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="zy5.txt"'
message.attach(att1)# 构造附件2,传送当前目录下的 runoob.txt 文件
b=open('1.png', 'rb').read()
att2 = MIMEText(b, 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="1.png"'
message.attach(att2)try:smtpObj = smtplib.SMTP()smtpObj.connect("smtp.qq.com")  # 连接qq邮箱smtpObj.login('接收方邮箱@qq.com', 'udfhrmjpxyhcdbbf')  # 登录--发送者账号和口令smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功")
except smtplib.SMTPException:print("Error: 无法发送邮件")

结果如下:

五、发送html图片、链接加附件邮件

插入上面作为附件的1.png图片,需要在邮件正文内容中添加捎带html图片的代码:

mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>#这里关于图片的名字不用做任何修改,会有下面的代码进行读取1.png
"""

还需要读取1.png图片内容:

#加入html图片
# 指定图片为当前目录
fp = open('1.png', 'rb')      #若要修改图片,只需更改图片名称即可切换
msgImage = MIMEImage(fp.read())
fp.close()# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')    #不做任何修改
message.attach(msgImage)

整体代码如下:

import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Headersender = '3268743433@qq.com'
receivers = ['3268743433@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("张", 'utf-8')
message['To'] = Header("艳", 'utf-8')
subject = 'Python SMTP html格式加附件邮件测试'
message['Subject'] = Header(subject, 'utf-8')# 邮件正文内容
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
message.attach(MIMEText(mail_msg, 'html', 'utf-8'))# 构造附件1,传送当前目录下的 test.txt 文件
a=open('zy5.txt', 'rb').read()
att1 = MIMEText(a, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="zy5.txt"'
message.attach(att1)# 构造附件2,传送当前目录下的 runoob.txt 文件
b=open('1.png', 'rb').read()
att2 = MIMEText(b, 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="1.png"'
message.attach(att2)#加入html图片
# 指定图片为当前目录
fp = open('1.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
message.attach(msgImage)try:smtpObj = smtplib.SMTP()smtpObj.connect("smtp.qq.com")  # 连接qq邮箱smtpObj.login('3268743433@qq.com', 'udfhrmjpxyhcdbbf')  # 登录--发送者账号和口令smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功")
except smtplib.SMTPException:print("Error: 无法发送邮件")

实现效果如图:

Python使用smtplib发送邮件相关推荐

  1. Python通过smtplib发送邮件(2020最新最全版)

    smtplib 邮件自动发送 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. pyt ...

  2. python自动发邮件报554错误_python3 使用smtplib发送邮件错误554

    python3使用smtplib和MIME发送邮件失败 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18from smtplib import SMTP ...

  3. 定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱

    本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下 整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据. 产品端有个自动出报告的需求,并且希 ...

  4. [Python] [邮件发送] 用Python的smtplib和email库进行邮件发送

    目录 1.Intro 2.Details 3.Theory 4.Environment 5.Source 6.Conclusion 1.Intro 眼看就到了12月中旬,除了帮朋友码竞赛题,前半个月可 ...

  5. python通过代理发送邮件_python发送邮件

    python中邮件发送可以使用smtplib模块,也可以使用第三方的yagmail模块. 邮件收发简介假如从xx@126.com发送一份邮件至xx@sina.com.首先使用Foxmail等软件写好邮 ...

  6. python 实现SMTP发送邮件(四)-添加附件

    Python实现SMTP发送邮件(四)-添加附件 [Python]  纯文本查看  复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 ...

  7. email邮件中 内嵌iframe_邮件发送,使用Python中 smtplib与email 模块实现自动发送QQ邮件...

    在 Python 的实际应用中,特别是在执行周期性定时任务的场景中,我们希望能够一种简单.方便的方式获取任务的运行结果和状态.一般我们通过支持邮件发送功能的方式,实现任务结果的反馈.本文主要介绍,如何 ...

  8. python:smtplib --- SMTP 协议客户端

    python:smtplib --- SMTP 协议客户端 简介 SMTP 对象 SMTP 示例 简介 smtplib 模块定义了一个 SMTP 客户端会话对象,该对象可将邮件发送到互联网上任何带有 ...

  9. 使用Python的smtplib模块发送带附件的邮件

      上一篇文章<使用Python的smtplib模块发送简单邮件>介绍了调用smtplib模块发送包含简单内容的邮件,本文继续学习参考文献1中的发送带附件的邮件的示例代码,同时由于参考文献 ...

最新文章

  1. 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务
  2. CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
  3. 组件间数据交互——父组件向子组件传值( props属性值类型) 子组件向父组件传值-携带参数 || 非父子组件间传值
  4. git 如何删除本地创建的仓库(转载自 https://segmentfault.com/q/1010000002996177?_ea=262685)...
  5. C#语言之“中英文混合字符串对齐”的方法
  6. 借力 Docker ,三分钟搞定 MySQL 主从复制!
  7. 深度学习人体姿态估计:2014-2020全面调研
  8. 矩阵论及其应用_群表示论笔记(一)
  9. 这届年轻人,没到35岁就开始准备退休了
  10. 【Elasticsearch】Elasticsearch 集群 运维 高性能 架构设计 高负载
  11. 1、安装Lync Server 2013前的准备工作
  12. python代码翻译器-Python实现翻译软件
  13. 几款好用的内网穿透工具
  14. 六大云计算厂商南山论剑,收下这封英雄帖!
  15. 【毕业设计】空气质量检测仪(环境检测盒子)- stm32 单片机 嵌入式 物联网
  16. craftsmanship中文_craftsmanship
  17. 从头搭建DVWA平台
  18. 项目开发中,真的有必要定义VO,BO,PO,DO,DTO这些吗?
  19. const T、const T*、T *const、const T、const T* 的区别
  20. 电脑端,PC端,微信小程序打不开,加载空白,或者提示加载失败

热门文章

  1. 看人力资源管理系统如何为企业创造价值
  2. Oracle 字符串比较大小
  3. 光纤之父高锟:从痴人说梦到诺贝尔物理学奖
  4. ip地址库管理之ipdb
  5. AES加解密之ECB、CBC和CFB三种模式
  6. 使用vue-cli创建uni-app项目
  7. Unity3D实战【八】Animator 动画控制器
  8. FBI罕见对波音刑事调查 事故发展成丑闻?
  9. 中山大学人工智能神经网络学习文本情感分类训练
  10. python安装库考虑是网速的原因,采用国内的镜像源来加速