我是一个测试工程师,在做自动化时,会写一些自己用的好的工具,目前有一些现成的工具,自己用着,不是大材小用,就是不符合实际需求,这次整理一个发送邮件的脚本。
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]])
参数解释:
下面为构建好的 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 = 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 = 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()
print(latest_mail["id"])
print(latest_mail["from"])
print(latest_mail["to"])
print(latest_mail["subject"])
代码解释:通过 get_latest () 方法获取最新一封邮件,分别打印邮件 ID、发件人、收件人、邮件标题。当前邮箱邮件如下图所示。
参考网址:https://www.5axxw.com/
|