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

文章目录

  • 1. smtplib 与 email 模块介绍
    • 1.1. 模块使用
  • 2.发送 HTML 格式邮件和带附件的邮件
    • 2.1. HTML 格式邮件介绍
    • 2.2. 发送 HTML 格式邮件
    • 2.3. 带附件邮件介绍
    • 2.4. 发送带附件的邮件
  • 3.使用 zmail 模块收发邮件
    • 3.1. zmail 模块介绍
    • 3.2. zmail 模块使用
    • 3.3. 利用 zmail 模块收发邮件
      • 3.3.1 发送邮件

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 发送邮件 普通邮件 HTML 发送带附件 群发邮件相关推荐

  1. python3发送邮件_Python3使用SMTP发送带附件邮件

    一.设置开启SMTP服务并获取授权码 可以参考第一篇文章,这里不再赘述:[一]https://www.jb51.net/article/142220.htm 二.使用Python3 发送带附件的邮件 ...

  2. php 发送带附件的邮件,php发送带附件的电子邮件

    我似乎无法找到这个我写的php函数的问题,应该发送带附件的电子邮件.我已经挣扎了很长一段时间. function myMail($to, $subject, $mail_msg, $filename, ...

  3. Python 发送邮件 和 发送带附件邮件

    摘要:      平时运行一些脚本,需要把结果发送到邮箱,可以用python来处理,如下: 1,有邮件服务器: #!/bin/env python # -*- encoding: utf-8 -*- ...

  4. python菜谱发送到邮箱_Python菜谱5:发送带附件的邮件

    我们平时需要使用 Python 发送各类邮件,这个需求怎么来实现?答案其实很简单,smtplib 和 email库可以帮忙实现这个需求.smtplib 和 email 的组合可以用来发送各类邮件:普通 ...

  5. python中发送带附件的邮件,python SMTP实现发送带附件电子邮件

    本文实例为大家分享了python SMTP发送带附件电子邮件的具体代码,供大家参考,具体内容如下 可采用email模块发送电子邮件附件.发送一个未知MIME类型的文件附件其基本思路如下: 1. 构造M ...

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

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

  7. Python 发送带附件的邮件 发出去的附件格式就成bin

    导语:学习到使用Python发送带附件的邮件,但收件人收到的附件格式是bin,附件名称也不是filename写的名称. 1.效果如下: 2.解决办法: 将 att1['Content-Disposit ...

  8. python邮件发送csv附件_Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法

    最近在SIOMP系统中添加一项功能时,即自动发送带附件邮件到指定邮箱时,发现在发送时报错:错误信息:STARTTLS extension not supported by server.很是奇怪,但发 ...

  9. 使用springboot发送带附件邮件(465端口加密邮件)

    一.开启SMTP服务 二.编码 1.加依赖(pom.xml) <dependency><groupId>org.springframework.boot</groupId ...

最新文章

  1. Android 人民币符号在布局中实现的效果不一样的处理方法
  2. hdu1874(畅通工程续)
  3. 一口气说出 6 种 @Transactional 注解的失效场景
  4. sql 删除用户失败
  5. Vue.js not detected 解决办法
  6. python安装第三方库win10_音频处理 windows10下python三方库librosa安装教程
  7. SAP UI5 testFLPService - local run will start mock server
  8. 协方差矩阵的详细说明
  9. seleniumpython定位网页元素方法_Python+Selenium 定位元素
  10. GCAlloc 问题一则
  11. 【图像压缩】基于matlab GUI DCT图像压缩(压缩率可调)【含Matlab源码 1049期】
  12. 快速突破面试算法之栈与队列结构篇
  13. (32位汇编 九)ADC/SBB/XCHG/MOVS/STOS/REP
  14. 禁止QQ迷你首页运行【转】
  15. 锤子android 7,锤子新机坚果Pro配置放出:骁龙626处理器、Android 7.1.1系统
  16. linux 怎么查看系统用户,Linux系统下查看用户的常用方法
  17. Linux locale命令
  18. win10时间同步服务器修改
  19. conemu 打开wsl 报错
  20. 2019年河源市计算机等级考试,2019年9月广东省河源市计算机等级考试注意事项

热门文章

  1. 诺基亚 2060java_不到500元的神机,诺基亚2060全五色真机图赏 - IT之家
  2. 诺基亚n1支持java功能吗,诺基亚N1可以打电话吗?诺基亚N1支持移动卡吗?
  3. 一步一步创建三维数字地球
  4. 无限远征服务器,《无限远征队》:玩法丰富的趣味放置RPG,无尽的冒险等你来战...
  5. 【学习笔记】C++语言程序设计(郑莉):多态性
  6. Speed Dreams 竞速梦想 3D赛车游戏
  7. 002-01朴素贝叶斯到语言模型
  8. Lip Reading Sentences in the Wild(2017)
  9. C语言简单数独游戏终盘生成
  10. 易灵思发力系统级封装SiP,探索FPGA新玩法