Python实现自动化发送邮件

 更新时间:2022年01月16日 16:04:43   作者:软件测试君  
大家好,本篇文章主要讲的是Python实现自动化发送邮件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

开门见山

自动化测试过程中,一般测试结果都会以邮件的形式发送给相关人员,那么,在Python中,如何编写代码将邮件发送给对应的用户?

同时,发送邮件时又有不同的形式,比如:文本、HTML、图片附件、非图片附件等,这些又是如何操作的呢?下面我们一起来学习学习~

自动化发送邮件SMTP 介绍

SMTP中文名为简单邮件传输协议,是一种提供可靠且有效的电子邮件传输的协议,可以传输系统之间的邮件信息。

SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。

使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。

我们以QQ邮箱为例,需要发送邮件,必须首先开启SMTP服务。

开启SMTP服务

登录QQ邮箱,点击设置;点击账户;

图片

将POP3/SMTP服务点击为已开启状态;按照步骤生成授权码,授权码一般为16位。

图片

按照以上步骤,SMTP服务很简单就开启好了。

邮件的属性配置

新建一个Python文件编写代码:

# 邮箱属性配置

# 邮箱服务端
mailserver = 'smtp.qq.com' 
# 发件人-此邮箱是我随便写的
userName_SendMail = '666666666@qq.com'  
# 邮箱发件授权码-为发件人邮箱根据第四步生成的授权码
userName_AuthCode = 'abcdefghijklmnop'
# 定义邮件的接收者-我随便写的,若收件人较多,可用列表表示
received_mail = ['888888888@qq.com','999999999@qq.com']  
 
若为QQ邮箱,则服务端为smtp.qq.com,若为163邮箱,则服务端为smtp.163.com,其他邮箱大家可自行百度查询。

发送文本邮件

小试牛刀,我们先发送一封简单的文本邮件。

导包:

需要使用到SMTPLIB库来进行邮箱的连接import smtplib。处理邮件内容的库:email.mine,发送文本邮件需要导入:from email.mime.text import MIMEText。

# 需要使用到SMTPLIB库来进行邮箱的连接
import smtplib
# 处理邮件内容的库,email.mine
from email.mime.text import MIMEText

# 邮箱属性配置

# 邮箱服务端
mailserver = 'smtp.qq.com' 
# 发件人-此邮箱是我随便写的
userName_SendMail = '666666666@qq.com'  
# 邮箱发件授权码-为发件人邮箱根据第四步生成的授权码
userName_AuthCode = 'abcdefghijklmnop'
# 定义邮件的接收者-我随便写的,若收件人较多,可用列表表示
received_mail = ['888888888@qq.com','999999999@qq.com'] 

# 发送一封简单的邮件,处理邮件内容
content = '这是一封纯粹的文本信息内容!这是一封纯粹的文本信息内容!'
# 纯文本形式的邮件内容的定义,通过MIMEText进行操作,plain为默认的文本的展示形式
email = MIMEText(content, 'plain', 'utf-8')  
email['Subject'] = '这是邮件的主题'  # 定义邮件主题
email['From'] = userName_SendMail  # 发件人
email['To'] = ','.join(received_mail)  # 收件人(可以添加多个,若只有一个收件人,可直接写邮箱号)


# 发送邮件

# QQ邮箱的端口号是465,其他邮箱的端口号可自行百度,非QQ邮箱,一般使用SMTP即可,不需要有SSL
smtp = smtplib.SMTP_SSL(mailserver, port=465) 
smtp.login(userName_SendMail, userName_AuthCode)
smtp.sendmail(userName_SendMail, ','.join(received_mail), email.as_string())

smtp.quit()
print('好厉害啊,邮件发送成功了')

发送HTML邮件

发送其他邮件与以上代码类似,邮箱的属性配置和发送邮件部分不发生变化,只需修改对于邮件内容的处理部分。

将MIMEText(content, ‘plain’, ‘utf-8’)改为 MIMEText(content, ‘HTML’, ‘utf-8’),plain为默认的文本的展示形式。

# 需要使用到SMTPLIB库来进行邮箱的连接
import smtplib
# 处理邮件内容的库,email.mine
from email.mime.text import MIMEText

# 邮箱属性配置

# 邮箱服务端
mailserver = 'smtp.qq.com' 
# 发件人-此邮箱是我随便写的
userName_SendMail = '666666666@qq.com'  
# 邮箱发件授权码-为发件人邮箱根据第四步生成的授权码
userName_AuthCode = 'abcdefghijklmnop'
# 定义邮件的接收者-我随便写的,若收件人较多,可用列表表示
received_mail = ['888888888@qq.com','999999999@qq.com'] 

# 发送一封HTML内容的邮件
content = """
<p>这是一封HTML文本的邮件</p>
<p><a href="http://www.baidu.com" rel="external nofollow" >点击这里进入百度</a></p>
"""
email = MIMEText(content, 'HTML', 'utf-8')
email['Subject'] = '这是邮件的主题_HTML'  # 定义邮件主题
email['From'] = userName_SendMail  # 发件人
email['To'] = ','.join(received_mail)  # 收件人


# 发送邮件

# QQ邮箱的端口号是465,其他邮箱的端口号可自行百度,非QQ邮箱,一般使用SMTP即可,不需要有SSL
smtp = smtplib.SMTP_SSL(mailserver, port=465) 
smtp.login(userName_SendMail, userName_AuthCode)
smtp.sendmail(userName_SendMail, ','.join(received_mail), email.as_string())

smtp.quit()
print('好厉害啊,邮件发送成功了')

发送附件邮件

发送附件邮件,邮箱发送形式改为email = MIMEMultipart(),并对发送的附件进行处理,处理邮件附件需要导入MIMEMultipart,Header,MIMEBase。

导包:

from email.mime.multipart import MIMEMultipart

from email.header import Header

from email.mime.base import MIMEBase

# 需要使用到SMTPLIB库来进行邮箱的连接
import smtplib
# 处理邮件附件,需要导入MIMEMultipart,Header,MIMEBase
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.base import MIMEBase
from email import encoders  # 编码格式

# 邮箱属性配置
# 邮箱服务端
mailserver = 'smtp.qq.com' 
# 发件人-此邮箱是我随便写的
userName_SendMail = '666666666@qq.com'  
# 邮箱发件授权码-为发件人邮箱根据第四步生成的授权码
userName_AuthCode = 'abcdefghijklmnop'
# 定义邮件的接收者-我随便写的,若收件人较多,可用列表表示
received_mail = ['888888888@qq.com','999999999@qq.com'] 

# 邮件中发送附件
# 附件配置邮箱
email = MIMEMultipart()
email['Subject'] = '这是邮件的主题_非图片附件'  # 定义邮件主题
email['From'] = userName_SendMail  # 发件人
email['To'] = ','.join(received_mail)  # 收件人(可以添加多个,若只有一个收件人,可直接写邮箱号)

# 附件处理
att = MIMEBase('application', 'octet-stream')  # 规范
att.set_payload(open('测试文件.txt', 'rb').read())
att.add_header('Content-Disposition', 'attachment', filename=Header('测试文件.txt', 'gbk').encode())
encoders.encode_base64(att)
email.attach(att)


# 发送邮件
smtp = smtplib.SMTP_SSL(mailserver, port=465)  # QQ邮箱的端口号是465,其他邮箱的端口号可自行百度,非QQ邮箱,一般使用SMTP即可,不需要有SSL
smtp.login(userName_SendMail, userName_AuthCode)
smtp.sendmail(userName_SendMail, ','.join(received_mail), email.as_string())

smtp.quit()
print('好厉害啊,邮件发送成功了')

后记

Python对于邮件的发送目前我就写到这里,马马虎虎,还请各位大佬们多多指教,若文章对你有帮助,请留下您的小心心!加油哦!

送给大家一句话,共勉:当我们能力不足的时候,首先要做的是内修!当我们能力足够强大的时候,就可以外寻了!

总结

到此这篇关于Python实现自动化发送邮件的文章就介绍到这了,更多相关Python自动发邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Python绘制数据的瀑布图的教程

    利用Python绘制数据的瀑布图的教程

    这篇文章主要介绍了利用Python绘制数据的瀑布图的教程,教程中主要用到Pandas和matplotlib这两个库,需要的朋友可以参考下
    2015-04-04
  • 详解flask入门模板引擎

    详解flask入门模板引擎

    这篇文章主要介绍了详解flask入门模板引擎,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python+Sklearn实现异常检测

    Python+Sklearn实现异常检测

    这篇文章主要为大家详细介绍了Python如何利用Sklearn实现异常检测,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-12-12
  • 利用python在Word文档中创建和执行条件邮件合并

    利用python在Word文档中创建和执行条件邮件合并

    邮件合并域和IF域是Word文档中两种非常实用的域,前者可以用来进行邮件合并,根据数据批量创建定制的Word文档,本文讲介绍如何使用Python在Word文档中创建条件邮件合并域以及执行条件邮件合并,需要的朋友可以参考下
    2024-08-08
  • Pandas数据分析之groupby函数用法实例详解

    Pandas数据分析之groupby函数用法实例详解

    这篇文章主要为大家介绍了Pandas数据分析之groupby函数用法实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Python解惑之整数比较详解

    Python解惑之整数比较详解

    这篇文章主要给大家介绍了Python中整数比较的相关资料,文中通过示例代码介绍的非常详细,详细会对大家学习python的整数具有一定的参考价值,需要的朋友下面跟着小编一起来学习学习吧。
    2017-04-04
  • Python虚拟机字节码教程之控制流实现详解

    Python虚拟机字节码教程之控制流实现详解

    在本篇文章当中主要给大家分析 python 当中与控制流有关的字节码,通过对这部分字节码的了解,我们可以更加深入了解 python 字节码的执行过程和控制流实现原理
    2023-04-04
  • python连接mysql实例分享

    python连接mysql实例分享

    本文给大家汇总介绍了使用python连接mysql的几个实例,非常的简单实用,有需要的小伙伴可以参考下
    2016-10-10
  • Python基于numpy灵活定义神经网络结构的方法

    Python基于numpy灵活定义神经网络结构的方法

    这篇文章主要介绍了Python基于numpy灵活定义神经网络结构的方法,结合实例形式分析了神经网络结构的原理及Python具体实现方法,涉及Python使用numpy扩展进行数学运算的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • 使用DataFrame删除行和列的实例讲解

    使用DataFrame删除行和列的实例讲解

    下面小编就为大家分享一篇使用DataFrame删除行和列的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论