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/

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuno Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值