【python】如何通过python来发邮件,各种发邮件方式详细解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 【python】如何通过python来发邮件,各种发邮件方式详细解析

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

Python 发送邮件

在日常工作中,我们可能经常会用到发送邮件,但如果每次都人工来发送,那岂不是很麻烦,今天我们就来讲解下如何通过python语言来优雅地发送邮件

1.发送普通邮件

1 需要有一个发送邮件的邮箱

  • 163,126,qq…
  • 今天咱们是以 qq 邮箱为例,其它大家自行尝试,都基本类似

2 申请开启发送邮件

  • 生成一个秘钥:x**************ic # 很重要,不要泄露

3 写python代码,实现发送邮件(smtp模块–》python内置)

  • 就使用我们的账号:31*******35@qq.com

以QQ邮箱为例,开启授权码图解,登录邮箱,点击设置

往下拉,找到pop3那一串,点击开启

点击管理服务,在弹出的页面生成授权码

点击生成授权码,然后需要扫码发短信同意授权,会生成一串字符串

4.发送邮件api详解

在Python3中,使用mimetext模块可以轻松地创建电子邮件消息。在发送电子邮件时,我们需要设置邮件的主题、收件人、发件人、正文和附件等信息。

而mimetext模块就是用来处理邮件中的文本和附件的。本文将详细介绍mimetext模块中的参数及其用法。

发邮件常见的几个类介绍

1.MIMEText类

MIMEText类用来创建邮件的正文,它有三个参数:

_text:邮件正文内容,可以是纯文本或HTML格式。

_subtype:邮件正文内容的类型,可以是"plain"(纯文本)、“html”(HTML格式)。

_charset:邮件正文内容的编码方式,常用的有"utf-8"、"gbk"等。

常见用法如下:

from email.mime.text import MIMEText

# ----------方法1
msg = MIMEText('测试邮件。收到请不用回复', 'plain', 'utf-8')

# -----------方法2
content = '''
 <p>我的地址:</p>
 <p><a href='http://hldaig.xyz/'>点击进入我的</a></p>
 <p>我的公众号二维码:</p>
 <p><img src="cid:image"></p>
 '''
html = MIMEText(content, 'html', 'utf-8')

2.MIMEImage类

MIMEImage类用来创建邮件中的图片,它有两个参数:

_imagedata:图片的二进制数据。

_subtype:图片的类型,可以是"jpeg"、“gif”、"png"等。

代码示例

from email.mime.image import MIMEImage
#-----------方法1
with open('test.jpeg', 'rb') as f:
    image_data = f.read()
msg = MIMEImage(image_data, 'jpeg')
# ----------方法2
with open('test.gif', 'rb') as f:
    image_data = f.read()
msg = MIMEImage(image_data, 'gif')
# ---------方法3
with open('test.png', 'rb') as f:
    image_data = f.read()
msg = MIMEImage(image_data, 'png')

3.MIMEAudio类

MIMEAudio类用来创建邮件中的音频文件,它有两个参数:

_audiodata:音频文件的二进制数据。

_subtype:音频文件的类型,可以是"mp3"、"wav"等。

代码示例

from email.mime.audio import MIMEAudio

with open('test.mp3', 'rb') as f:

    audio_data = f.read()

msg = MIMEAudio(audio_data, 'mp3')

4.MIMEBase类

MIMEBase类是所有MIME类型的基类,它有四个参数:

_maintype:MIME类型的大类,常见的有"text"、“image”、“audio”、“video”、"application"等。

_subtype:MIME类型的子类,如"text/plain"、“image/jpeg”、"audio/mp3"等。

_encoder:编码方式,可以是"base64"、"quoted-printable"等。

_payload:MIME类型的内容,可以是文本、图片、音频、视频等。

代码示例:

from email.mime.base import MIMEBase

with open('test.pdf', 'rb') as f:

    pdf_data = f.read()

msg = MIMEBase('application', 'octet-stream')

msg.set_payload(pdf_data)

5.发送普通邮件完整代码

# 1 导入模块
import smtplib
from email.mime.text import MIMEText  #往邮件中写内容的对象

from email.utils import formataddr #发件人信息


# 2 发送方和接收方配置
# 发件方邮箱:谁发送的
msg_from='3*****2@qq.com'
# 生成的授权码:不能泄露
password='h******ifj'
# # 发送给谁,可以写多个人,以列表形式存储
msg_to=['li*****91@126.com','18*******68@139.com']
# 邮件主题
subject = "给领导问好"  # 主题
content = "领导早上好,领导辛苦了" #邮件内容
# 生成一个MIMEText对象(还有一些其它参数)
msg = MIMEText(content)
# 放入邮件主题
msg['Subject'] = subject
# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,将收件人转化为以逗号分隔的字符串
msg['to'] = ','.join(msg_to)
try:
    # 通过ssl方式发送,服务器地址,端口
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登录到邮箱
    s.login(msg_from, password)
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个
    print('成功')
except BaseException as e:
    print(e)
finally:
    #不管是否发送成功,都退出服务
    s.quit()

登录邮箱查看,发送成功

2.发送html格式邮件

# 1 导入模块
import smtplib
from email.mime.text import MIMEText  #往邮件中写内容的对象

from email.utils import formataddr #发件人信息


# 2 发送方和接收方配置
# 发件方邮箱:谁发送的
msg_from='3******72@qq.com'
# 生成的授权码:不能泄露
password='h*********ifj'
# # 发送给谁,可以写多个人,以列表形式存储
msg_to=['li*******1@126.com','1**********8@139.com']
# 邮件主题
subject = "非常重要,中了五百万"  # 主题


# 构建html标签
content = '''
<h1>恭喜您中奖了</h1>
<p><a href="https://www.baidu.com">点我兑换奖品</a></p>
'''


# 生成一个MIMEText对象(发送html格式邮件)
msg = MIMEText(content,'html','utf-8')
# 放入邮件主题
msg['Subject'] = subject
# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,将收件人转化为以逗号分隔的字符串
msg['to'] = ','.join(msg_to)
try:
    # 通过ssl方式发送,服务器地址,端口
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登录到邮箱
    s.login(msg_from, password)
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个
    print('成功')
except BaseException as e:
    print(e)
finally:
    #不管是否发送成功,都退出服务
    s.quit()

邮箱查看,发送成功

3 发送带附件邮件

添加附件时需要使用MIMEMultipart类,它有一个attach()方法可以添加邮件中的附件。用smtplib模块发送示例代码:

# 1 导入模块
import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText  #往邮件中写内容的对象

from email.utils import formataddr #发件人信息

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase


from email import encoders


# 2 发送方和接收方配置
# 发件方邮箱:谁发送的
msg_from='3*******2@qq.com'
# 生成的授权码:不能泄露
password='h**********fj'
# # 发送给谁,可以写多个人,以列表形式存储
msg_to=['li*********1@126.com','1*********8@139.com','3*********2@qq.com']
# 邮件主题
subject = "老板,这是今日日报,请查收"  # 主题


# 创建一个带附件的实例
msg = MIMEMultipart()

# 放入邮件主题
msg['Subject'] = subject
# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,将收件人转化为以逗号分隔的字符串
msg['to'] = ','.join(msg_to)


# 邮件正文内容
msg.attach(MIMEText('今日日报:1 xxx', 'plain', 'utf-8'))


# 添加附件1
# 构造附件1,传送当前目录下的 ribao.txt 文件,注意文件要以rb的形式读取
file = open('ribao.txt', 'rb').read()
att1 = MIMEText(file, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'

# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1.add_header('Content-Disposition', 'attachment', filename="日报.txt")
msg.attach(att1)




# 添加附件2--图片
with open('gzh.png', 'rb') as f:
    # 设置附件的MIME和文件名,这里是png类型:
    mime = MIMEBase('image', 'png', filename='gzh.png')
    # 加上必要的头信息:
    mime.add_header('Content-Disposition', 'attachment', filename='gzh.png')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的内容读进来:
    mime.set_payload(f.read())
    # 用Base64编码:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)


# 构造附件3,图片格式
fp = open('对称加密.png', 'rb')
msgImage = MIMEImage(fp.read(),'png')
fp.close()

# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
msgImage.add_header('Content-Disposition', 'attachment', filename="对称加密.png")
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)



try:
    # 通过ssl方式发送,服务器地址,端口
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登录到邮箱
    s.login(msg_from, password)
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个
    print('成功')
except BaseException as e:
    print(e)
finally:
    #不管是否发送成功,都退出服务
    s.quit()

查看邮件中,已包含附件

4.总结

综上,就是我们通过python来发送邮件的常用方法的详细流程,我们也可以结合linux定时任务,或者celery来实现定时发送,也不难。上述代码在使用时可以直接拿去用,只需要改下自己邮箱的参数即可,是不是很方便,喜欢的朋友一键三连,python常规用法持续更新中!!!



相关文章
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
7天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
25天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
28天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
56 20
|
1月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
89 3
|
2月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
178 5
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
133 2
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

热门文章

最新文章