软件测试|教你用Python给领导发邮件

举报
霍格沃兹测试开发 发表于 2023/03/05 10:57:25 2023/03/05
【摘要】 前言我有个朋友是一个品牌的县级代理,免不了要给自己的上级代理汇报自己区域的销售情况,他不只一次给我抱怨,发送报表的次数太多,领导也太多,有时候一天发邮件就要占用自己不少的时间,问我有没有什么办法能够解放他。作为他的好基友,我必须帮帮他,刚好我们Python能够实现自动化的发送邮件,非常符合他的需求,脚本写好,他只需要准备好报表,动动手指就可以完成发送了。 邮箱设置要实现自动化发送邮件,我们...

前言

我有个朋友是一个品牌的县级代理,免不了要给自己的上级代理汇报自己区域的销售情况,他不只一次给我抱怨,发送报表的次数太多,领导也太多,有时候一天发邮件就要占用自己不少的时间,问我有没有什么办法能够解放他。

作为他的好基友,我必须帮帮他,刚好我们Python能够实现自动化的发送邮件,非常符合他的需求,脚本写好,他只需要准备好报表,动动手指就可以完成发送了。

邮箱设置

要实现自动化发送邮件,我们首先要对自己的邮箱进行设置,开启SMTP服务,具体步骤如下:

  1. 登录邮箱之后,点击设置

在这里插入图片描述

  1. 点击账户,开启POP3/SMTP服务,该服务是默认关闭的

在这里插入图片描述

  1. 生成授权码

开启SMTP服务之后,必须要点击生成授权码,该授权码才是使用Python发送邮件时的真正密码。

在这里插入图片描述
发送邮件之后,点击我已发送,即可展示授权码,可以将授权码保存下来。

在这里插入图片描述

模块介绍

Python自动化发邮件使用到了smtplib和email模块,这两个模块都是Python的内置模块,无需安装可以直接导入。其中,smtplib模块主要负责发送邮件,email模块主要负责构造邮件。

  • smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。

  • email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

  1. smtplib模块

smtplib.SMTP() :实例化SMTP()

login(user,password):

  • user:登录邮箱的用户名
  • password:登录邮箱的密码,即上方生成的授权码

sendmail(from_addr,to_addrs,msg,…):

  • from_addr:邮件发送者地址
  • to_addrs:邮件接收者地址。字符串列表[‘接收地址1’,‘接收地址2’,‘接收地址3’,…]或’接收地址’
  • msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。

quit():用于结束SMTP会话。

  1. email模块

email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。

我们常用到的有,text,image,multipart三个模块。

导入方式如下:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

实现邮件发送

完成上述设置,导入模块之后,我们可以开始编写实现自动化发送邮件的代码了,我们先来实现一下纯文字版的邮件发送。代码如下:

from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

# smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
# email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。


host_server = 'smtp.qq.com'  #qq邮箱smtp服务器
sender_qq = 'xxxxxxxxxx@qq.com' #发件人邮箱
pwd = 'xxxxxxxxxxxx'
receiver = ['xxxxxxxxxx@163.com' ]#收件人邮箱

mail_title = 'theshy' #邮件标题
mail_content = "theshy是英雄联盟历史第一上单" #邮件正文内容
# 初始化一个邮件主体
msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
# msg["To"] = Header("测试邮箱",'utf-8')
msg['To'] = ";".join(receiver)
# 邮件正文内容
msg.attach(MIMEText(mail_content,'plain','utf-8'))



smtp = SMTP_SSL(host_server) # ssl登录

# login(user,password):
# user:登录邮箱的用户名。
# password:登录邮箱的密码,像笔者用的是QQ邮箱,QQ邮箱一般是网页版,需要用到客户端密码,需要在网页版的QQ邮箱中生成授权码,该授权码即为自动发送邮件的密码。
smtp.login(sender_qq,pwd)

# sendmail(from_addr,to_addrs,msg,...):
# from_addr:邮件发送者地址
# to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'
# msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
smtp.sendmail(sender_qq,receiver,msg.as_string())

# quit():用于结束SMTP会话。
smtp.quit()

收到的邮件如下图所示:

在这里插入图片描述

实现带附件的邮件发送

我朋友想要发送的邮件肯定不是纯文字版的邮件,而是需要加上Excel文件或者图片的带附件的邮件,实现该需求的代码如下:

import smtplib
import string
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication # 用于添加附件


host_server = 'smtp.qq.com'  #qq邮箱smtp服务器
sender_qq = 'xxxxxxx@qq.com' #发件人邮箱
pwd = 'xxxxxxxxxx'
receiver = 'xxxxxxxxxxx@163.com'
mail_title = '2023年2月月度销售报表' #邮件标题

#邮件正文内容
mail_content = "您好,这是xx地区品牌2023年2月月度销售报表,报表见附件,请您查阅"

msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
# msg["To"] = Header("测试邮箱","utf-8")

msg.attach(MIMEText(mail_content,'plain','utf-8'))
attachment = MIMEApplication(open('2023年2月月度销售报表.xlsx','rb').read())
attachment["Content-Type"] = 'application/octet-stream'
# 给附件重命名
basename = "2023年2月月度销售报表.xlsx"
attachment.add_header('Content-Dispositon','attachment',filename=('utf-8', '', basename))#注意:此处basename要转换为gbk编码,否则中文会有乱码。
msg.attach(attachment)


try:
    smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器
    smtp.set_debuglevel(1) # 0是关闭,1是开启debug
    smtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码
    smtp.login(sender_qq,pwd)
    smtp.sendmail(sender_qq,receiver,msg.as_string())
    smtp.quit()
    print("邮件发送成功")
except smtplib.SMTPException:
    print("无法发送邮件")

收到的邮件如下图所示:
在这里插入图片描述

总结

本文主要讲解了使用Python实现自动发送邮件的功能,使用Python自动发送邮件可以提升我们的工作效率,减少我们的重复工作,希望这篇文章能够帮到大家!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。