前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件测试|教你用Python给领导发邮件

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

原创
作者头像
Tester_muller
发布2023-03-05 10:58:04
6750
发布2023-03-05 10:58:04
举报

前言

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

作为他的好基友,我必须帮帮他,刚好我们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自动发送邮件可以提升我们的工作效率,减少我们的重复工作,希望这篇文章能够帮到大家!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 邮箱设置
      • 模块介绍
        • 实现邮件发送
          • 实现带附件的邮件发送
            • 总结
            相关产品与服务
            腾讯云 BI
            腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档