前言

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

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

更多技术文章

软件测试|教你用Python给领导发邮件相关推荐

  1. 某大厂领导发邮件,怒斥员工“21点没人加班”,要求员工反思!

    注意,又有奇葩领导出没. 近日,有网友爆出恒生电子某领导发邮件"反思"21:00后没人上班,该领导说,当时自己脑子里冒出了几个念头: 1.这些小组的工作任务都已经按时保质保量完成了 ...

  2. python脚本自动发邮件功能

    最近给项目加监控,用python写了一个脚本,在出错的时候自动发邮件通知的功能.代码如下 #! /usr/bin/python # -*- coding: utf-8 -*- from smtplib ...

  3. python自动批量发邮件脚本_Python实现自动发送邮件功能

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件.Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器 ...

  4. python接口自动化-发邮件带附件

    自动化脚本运行完成以后需要发邮件给相关负责人,那么怎样发送邮件呢,邮件里边又是怎么带附件的呢,今天我们就来了解一下. 1.发送邮件不带附件 首先创建一个py文件,名称为send_main.py,文件内 ...

  5. python凯撒密码详解_四十八、Python用smtp发邮件详解(163和QQ邮箱)

    Python发邮件详解 一.利用163的smtp发送邮件 import smtplibfrom email.mime.text import MIMETextfrom email.header imp ...

  6. python自动批量发邮件脚本_批量群发,营销必备!Python代码实现自动发送邮件!...

    在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使用 Python 封装发送邮件代码的. 一般发邮件方法SRE实战 互联网时代守护先 ...

  7. qq邮箱为例,使用Python给邮箱发邮件,包含图片附件和文本文件

    废话不多说上代码: import smtplib from email.mime.text import MIMEText from email.header import Header from e ...

  8. python收集数据发邮件_Python 提取数据库(Postgresql)并邮件发送

    刚入门python,发现确实是一个不错的语言. 业务部门要求将将某一个数据库中的表,定期发送到相关部门人员邮箱. 其实整个业务需求很简单,实现起来也不难. 但是由于刚入门python,所以还是借鉴了不 ...

  9. python qq邮箱发邮件_Python用QQ邮箱发邮件的实例教程

    Python2.7#!/usr/bin/env python2.7 # -*- coding=utf-8 -*- import smtplib from email.mime.text import ...

最新文章

  1. Python : IndentationError: expected an indented block
  2. 双向非循环递增链表——插入,删除,清空
  3. 蓝牙通话之HFP协议
  4. 驱动层和r3程序通讯的列子参考爱写驱动的女装大佬
  5. 沃信科技ERP系统容灾方案概述
  6. css布局方式_手把手教你CSS Flex布局「真香」
  7. python 相对导入_python 相对导入与绝对导入
  8. Python基础44(PyMySQL模块)
  9. Swift - 循环强引用,内存泄漏
  10. fortify hp 价格_惠普推出“惠普Fortify软件安全中心套件”
  11. HTML/CSS水平垂直居中方法(待补充)
  12. Windows Thrift安装及HelloWorld
  13. PPPOE宽带接入技术及常见故障分析
  14. CUTE FTP 控制连接已关闭
  15. DenseNet:比ResNet更优的CNN模型
  16. android的开机动画,设置安卓开机动画、开机logo
  17. 使用eclipse创建我的第一个JSP项目
  18. c语言abs作用是什么意思,c语言中函数abs和fabs有什么区别?
  19. 支持向量机SVM--线性
  20. 基因数据处理1之mapping_to_cram

热门文章

  1. java 案例 一千例_photoshop经典实例1000例
  2. PhotoShop脚本指南
  3. 北京 准生证办理(男方外地户口)
  4. volatile 关键字总结,原理+示例 - Java 轻量级同步
  5. #VCS#关于 simv 可执行返回结果的释义
  6. 服务器下查看硬件配置,查询服务器基本硬件配置信息
  7. javaweb基于SSM开发商城NBA网商购物平台 课程设计 毕业设计源码
  8. 软件工程基础个人项目——数独终局生成求解
  9. codeforces做题 记录
  10. 防Boss利器:SmartQQ4Eclipse