IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 发送邮件 普通邮件 HTML 发送带附件 群发邮件 -> 正文阅读

[Python知识库]python 发送邮件 普通邮件 HTML 发送带附件 群发邮件

我是一个测试工程师,在做自动化时,会写一些自己用的好的工具,目前有一些现成的工具,自己用着,不是大材小用,就是不符合实际需求,这次整理一个发送邮件的脚本。

1. smtplib 与 email 模块介绍

介绍 smtplib 之前,可以先拆分下,介绍什么是 SMTP,SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。Python 内置对 SMTP 的支持,可以发送纯文本邮件、HTML 邮件以及带附件的邮件,Python 对 SMTP 支持有 smtplib 和 email 两个模块,email 负责构造邮件,smtplib 负责发送邮件。

1.1. 模块使用

smtplib 和 email 模块是 Python 的内置模块,无需额外安装,可以直接进行使用。使用步骤如下:

步骤 1:模块导入

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

代码解释:

  • smtplib:smtplib 为负责发送邮件的模块;
  • MIMEText:构建邮件主体内容时使用;
  • MIMEMultipart:构建包含多个部分的邮件体的 MIME 对象,如带附件的邮件。
  • MIMEApplication:用来表示主要类型的 MIME 消息对象。

步骤 2:初始化 SMTP 对象

s=smtplib.SMTP([host [,port [,local_hostname]])

参数解释:

  • host:SMTP 服务器主机的 IP 地址或者是域名;

  • port:服务的端口号(默认是 25);

  • local_hostname:服务器的地址(默认是 localhost)。

下面为构建好的 SMTP 对象示例:

s=smtplib.SMTP("smtp.qq.com")

步骤 3:构建邮件内容

通过 Python 提供 email 模块构建邮件内容;

步骤 4:发送邮件

通过 smtplib 模块实现发送邮件。

2.发送 HTML 格式邮件和带附件的邮件

2.1. HTML 格式邮件介绍

所谓 HTML 格式的邮件,是指一类像网页一样的邮件,它包含有 HTML(超文本)链接,单击链接可以转到其他页面,可以有图片,声音等。对比普通的文本邮件,HTML 格式的邮件,可以使得邮件内容多姿多彩,除文字外,还能有声音图像链接等等。

通常在宣传活动、电商类等内容上使用 HTML 格式邮件的情况较多,目的是为了更好的展示邮件内容,以及和用户有所交互。

2.2. 发送 HTML 格式邮件

发送邮件如下代码所示:

import smtplib
from email.mime.text import MIMEText
host_server = 'smtp.qq.com'  # 主机地址
# 发件人邮箱
sender = "xxx@qq.com"
# 发件人邮箱密码、授权码
code = "xlogucqphohxcabi"
# 收件人
user = "xxxx@163.com"
# 准备邮件数据
# 邮件标题
mail_title = "第二封邮件"
# 内容
mail_content = """
<p>HTML格式邮件内容</p>
<hr/>
<p><a href="http://www.baidu.com">百度一下</a></p>
<ul>
    <li>top1</li>
    <li>top2</li>
</ul>
"""
# SMTP
smtp = smtplib.SMTP(host_server)
# 登录
smtp.login(sender, code)
# 发送
msg = MIMEText(mail_content, 'html', 'utf-8')
msg['Subject'] = mail_title
msg['From'] = sender
msg['To'] = user
smtp.sendmail(sender, user, msg.as_string())

代码解释:在上一小发送普通邮件代码的基础上,将发送内容由普通文本变更为 HTML 格式内容,首先修改 mail_content 设置为 HTML 内容,修改 MIMEText 构建参数为 html,其他内容不变。执行完成后,打开收件邮件即可收到第二封邮件,如下图所示。
在这里插入图片描述

2.3. 带附件邮件介绍

电子邮件附件是跟电子邮件一同发出的附带文件,附件包括声音、视频、文档、图片等一系列允许发送的文件(注意.exe 文件不允许发送)。带附件的邮件具体附件位置如下图所示。

图片描述在这里插入图片描述

2.4. 发送带附件的邮件

发送邮件如下代码所示:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
host_server = 'smtp.qq.com'  # 主机地址
# 发件人邮箱
sender = "389818529@qq.com"
# 发件人邮箱授权码
code = "xlogucqphohxcabi"
# 收件人
user = "yanwydxf@163.com"
# 准备邮件数据
# 邮件标题
mail_title = "第三封邮件"
# 邮件内容
mail_content = "具体请查看附件!"
# SMTP
smtp = smtplib.SMTP(host_server)
# 登录
smtp.login(sender, code)
#构建附件
attachment=MIMEApplication(open('newinfo.xlsx','rb').read())
#为附件添加一个标题
attachment.add_header('Content-Disposition','attachment',filename='data.xlsx')
msg=MIMEMultipart()#构建带附件的实例
#邮件标题
msg['Subject'] = mail_title
#发件人
msg['From'] = sender
#收件人
msg['To'] = user
# 发送
smtp.sendmail(sender, user, msg.as_string())

代码解释:在发送普通邮件的代码的基础上,导入 email 模块下 MIMEMultipart 与 MIMEApplication 用于构建附件。首先通过 MIMEApplication 封装附件,newinfo.xlsx 为本地文件名称, data.xlsx 为发送到对方邮箱后所显示的名称。通过 MIMEMultipart 构建带附件的实例,其他内容不变。执行完成后,打开收件邮件即可收到第三封邮件,如下图所示。

图片描述在这里插入图片描述

3.使用 zmail 模块收发邮件

3.1. zmail 模块介绍

使用 zmail 模块可以更加便捷的实现发送邮件、接收邮件功能,无需手动添加 - 服务器地址,端口,合适的协议等内容,zmail 都已经完成了这些工作。

zmail 模块 github 地址:https://github.com/ZYunH/zmail:

zmail 更多特性如下:

自动查找服务器地址及其端口;
自动使用合适的协议登录;
自动将 Python 字典转换为 MIME 对象(带有附件);
自动添加邮件标题和本地名称,以避免服务器拒绝您的邮件;
轻松自定义您的邮件标题;
支持 HTML 作为邮件内容。

Tips:zmail 仅在 python3 中运行,而无需第三方模块。不支持 python2。

你可以使用 zmai 进行以下操作:

作为监控脚本的发送邮件模块,及时传递信息
嵌入到已有的项目中实现功能
自定义邮件发送过程,诸如准点发送、定时发送等

zmail 模块支持的邮件服务器:

|服务器地址 |发邮件 |找回邮件 |备注

  • @163.com ? ? 需要应用专用密码
  • @qq.com ? ? POP3 需要应用专用密码
  • @126.com ? ? ——
  • @yeah.com ? ? ——
  • @gamil.com ? ? 需要应用专用密码
  • @sina.com ? ? ——
  • @outlook.com ? ? 需要应用专用密码
  • @hotmail.com ? ? 需要额外的设置

支持的企业邮件服务器:
名称 用法

  • 腾讯企业邮箱 zmail.server(‘username’,‘psw’,config=‘qq’)
  • 阿里企业邮箱 zmail.server(‘username’,‘psw’,config=‘ali’)
  • 网易企业邮箱 zmail.server(‘username’,‘psw’,config=‘163’)
  • Google 企业邮件 zmail.server(‘username’,‘psw’,config=‘google’)

3.2. zmail 模块使用

zmail 模块是 Python 的第三方库,使用前需要通过以下命令进行安装:

pip install zmail

zmail 安装完成后,使用之前请确保以下两点:

使用的 Python3;
所使用的邮箱已开启 SMTP / POP3 服务

zmail 使用步骤如下:

步骤 1:导入 zmail 模块

import zmail

步骤 2:初始化邮件服务

server = zmail.server('xxxxx@qq.com', 'mdgxgiwpnkspbxgx')

步骤 3:发送或接收邮件

利用 zmail 模块封装好的方法,完成邮件发送或接收邮件操作。

3.3. 利用 zmail 模块收发邮件

接下来一起来学习如何通过 zmail 进行发送邮件和接收邮件。

3.3.1 发送邮件

发送邮件如下代码所示:

import zmail
mail = {
    'subject': '你有一封新的邮件!', 
    'content_text': '测试内容!'
}
server = zmail.server('xxxxxx@qq.com', 'xlogucqphohxcabi')
server.send_mail("xxxxxx@163.com", mail)

代码解释:通过 zmail.server 构建与邮件服务器通信的 MailServer 对象,构建完成后,通过 send_mail () 方法发送邮件,第一个参数为接收邮件的邮箱,第二个参数为构建好的邮件内容。代码执行完成后,如下图所示。

3.2 群发邮件

日常工作中,经常遇到一种场景需要同时发给多名同事,并抄送给领导,此时可以使用 zmeil 实现群发邮件的功能,群发邮件代码如下所示:

import zmail
mail = {
    'subject': '会议通知', 
    'content_text': '周四上午9点来一层开会!'
}
server = zmail.server('xxxxxx@qq.com', 'xlogucqphohxcabi')
# 发送至收件人和抄送人
server.send_mail(['xxxxxx@qq.com','xxxxxx@163.com'],mail,cc=['xxxxxx@qq.com'])

代码解释:通过 zmail.server 构建与邮件服务器通信的 MailServer 对象,构建完成后,通过 send_mail () 方法发送邮件,第一个参数为接收邮件的邮箱,当需要群发时,这里设置为一个邮箱列表,第二个参数为构建好的邮件内容,第三个参数为要抄送的邮箱。代码执行完成后,如下图所示。
在这里插入图片描述

3.3 接收邮件

接收邮件如下代码所示:

import zmail
server = zmail.server('xxxxxx@qq.com', 'xlogucqphohxcabi')
latest_mail = server.get_latest()
# zmail.show(latest_mail)
print(latest_mail["id"])
print(latest_mail["from"])
print(latest_mail["to"])
print(latest_mail["subject"])

代码解释:通过 get_latest () 方法获取最新一封邮件,分别打印邮件 ID、发件人、收件人、邮件标题。当前邮箱邮件如下图所示。

在这里插入图片描述

参考网址:https://www.5axxw.com/

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:47:30  更:2022-07-20 18:48:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 2:42:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计