我们需要将【小组销量排名表.xlsx】通过邮件发送给【组长邮箱.xlsx】中的各个组长。

这里会学一个新的知识点——str.join(),通过它实现群发邮件的功能。

2 群发邮件

from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 设置邮箱账号
account = input('请输入邮箱账户:')
# 设置邮箱授权码
token = input('请输入邮箱授权码:')
# 设置邮箱服务器,端口
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录qq邮箱
smtp.login(account, token)
# 打开工作表
wb = load_workbook('./04_月考勤表.xlsx')
sheet = wb.active
# 编写正文内容
content = '四月的考勤表已出,其中迟到时长超出 45 分钟的人员如下:\n'
for row_data in sheet.iter_rows(min_row=2, values_only=True):# 获取迟到时长超过45分钟的人员if row_data[2] > 45:content += '姓名:{name} 迟到总时长:{time} \n'.format(name=row_data[1], time=row_data[2])
content += '详情见附件内容'
# 创建简单邮件对象
email_content = MIMEText(content, 'plain', 'utf-8')
# 读取工作表文件数据
with open('./04_月考勤表.xlsx', 'rb') as f:file_data = f.read()
# 设置内容类型为附件
attachment = MIMEText(file_data, 'base64', 'utf-8')
# 设置附件标题以及文件类型
attachment.add_header('Content-Disposition', 'attachment', filename='04_月考勤表.xlsx')
# 创建复合邮件对象
msg = MIMEMultipart()
# 添加正文到复合邮件对象中
msg.attach(email_content)
# 添加附件到复合邮件对象里
msg.attach(attachment)
# 设置发送者信息
msg['From'] = '陈知枫'
# 设置接受者信息
msg['To'] = '闪光金融的各位同事们'
# 设置邮件标题
msg['Subject'] = '04_月考勤表'
# 发送邮件
smtp.sendmail(account, 'example@mail.com', msg.as_string())
# 关闭邮箱服务
smtp.quit() 

接下来我们只要基于这份代码进行调整,就可以实现批量发送邮件的功能啦。

2.1 登录邮箱

只要注意登录时要用到邮箱授权码而不是邮箱密码。

import smtplib# 设置邮箱账号
account = input('请输入邮箱账户:')
# 设置邮箱授权码
token = input('请输入邮箱授权码:')
# 设置邮箱服务器,端口
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录qq邮箱
smtp.login(account, token)

2.2 设置邮件信息及正文文本

先定义一个空列表用于存放组长邮箱,遍历【组长邮箱.xlsx】,获取每一行第二列,即邮箱地址,使用append() 添加进列表。

但有一个问题,存放邮箱地址的列表是不能作为收件人的,可以打开邮箱看一下,群发邮件时,收件人的格式实际上是“aaa@qq.com;bbb@qq.com;ccc@qq.com”这样的,也就是以 ; 作为连接符。

因此需要先将所有单个的邮箱拼接成符合群发格式的收件人邮箱,这里就要用到str.join()

str.join() 的作用是连接可迭代对象中的所有字符串,举个例子:

# 定义列表
list1 = ["a", "b", "c"]# 以'-'作为字符串连接符
print('-'.join(list1))
# 以'+'作为字符串连接符
print('+'.join(list1))

可以看到字符串 'a','b','c'分别被 '-' 和 '+' 连接起来了。

# 定义列表
email_list = ["aaa@qq.com", "bbb@qq.com", "ccc@qq.com"]# 以';'作为字符串连接符,将email_list中各邮箱拼接成"aaa@qq.com;bbb@qq.com;ccc@qq.com"
print( ';'.join(email_list)  )

from openpyxl import load_workbook
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib# 打开《组长邮箱》
email_wb = load_workbook('./组长邮箱.xlsx')
email_sheet = email_wb.active# 创建邮件列表
email_list = []# 读取所有邮件地址
for row in email_sheet.iter_rows(min_row=2, values_only=True):email_list.append(row[1])# 设置邮箱账号
account = input('请输入邮箱账户:')
# 设置邮箱授权码
token = input('请输入邮箱授权码:')
# 设置邮箱服务器,端口
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录qq邮箱
smtp.login(account, token)# 设置邮件内容
msg = MIMEMultipart()
# 设置发送者信息
msg['From'] = account
# 设置接受者信息
msg['To'] = ';'.join(email_list)
# 设置邮件标题
msg['Subject'] = '销售等级排名汇报'# 设置邮件正文
content = '本月销售数据排名结果已计算完成,请各组长查收。'# 将正文添加到邮件内容里
email_content = MIMEText(content, 'plain', 'utf-8')
msg.attach(email_content)

2.3 设置附件

接下来就是把【等级一销售表.xlsx】和【小组销量排名表.xlsx】设置为附件,先读取【等级一销售表.xlsx】和【小组销量排名表.xlsx】,创建字典存放文件数据。

# 读取"等级一销售表"数据
with open('./等级销售表/等级一销售表.xlsx', 'rb') as f:rank_first_data = f.read()# 读取"小组销量排名表"数据
with open('./小组销量排名表.xlsx', 'rb') as f:group_rank_data = f.read()# 文件数据字典
file_dict = {'等级一销售表.xlsx': rank_first_data,'小组销量排名表.xlsx': group_rank_data
}

遍历文件数据字典,设置附件,这里需要使用email模块再创建一个MIMEText对象,用以承载附件信息并添加入MIMEMultipart对象中。


# 读取"等级一销售表"数据
with open('./等级销售表/等级一销售表.xlsx', 'rb') as f:rank_first_data = f.read()# 读取"小组销量排名表"数据
with open('./小组销量排名表.xlsx', 'rb') as f:group_rank_data = f.read()# 文件数据字典
file_dict = {'等级一销售表.xlsx': rank_first_data,'小组销量排名表.xlsx': group_rank_data
}
for file in file_dict:# 设置内容类型为附件attachment = MIMEText(file_dict[file], 'base64', 'utf-8')# 设置附件标题以及文件类型attachment.add_header('Content-Disposition', 'attachment', filename=file)# 将附件添加到邮件内容里msg.attach(attachment)

2.4 发送邮件并关闭邮箱服务

这一步就很简单啦,只需要两行代码。

# 发送邮件
smtp.sendmail(account, email_list, msg.as_string())
# 关闭邮箱服务
smtp.quit()

到这里,我们的群发邮件的代码也完成了,来看一下整合后的思维导图吧。

3 项目总结

终于,我们将项目的四个功能块逐一实现了,还记得四个功能块分别是什么吗?

1)功能一,我们先统计了全国各个销售部的销售数据,并进行排序。

2)功能二,我们根据排序后的结果,对全体销售人员按销量划分了等级。

3)功能三,对九个销售小组进行优秀频次和平均销量的排序。

4)功能四,将等级1的销售数据和排名数据以邮件形式发送给各地区销售部主管。

完整代码:

from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartemail_wb=load_workbook('./static/组长邮箱.xlsx')
email_sheet=email_wb.active
email_list=[]
for row in email_sheet.iter_rows(min_row=2,values_only=True):email_list.append(row[1])
print(email_list)
# 设置邮箱账号
account = input('请输入邮箱账户:')
# 设置邮箱授权码
token = input('请输入邮箱授权码:')
# 设置邮箱服务器,端口
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录qq邮箱
smtp.login(account, token)
msg=MIMEMultipart()# 设置发送者信息
msg['From'] = account
# 设置接受者信息
msg['To'] = ';'.join(email_list)
# 设置邮件标题
msg['Subject'] = '销售等级排名汇总'
content='本月销售数据排名结果已经完成,请各位组长查收'
email_content=MIMEText(content,'plain','utf-8')
msg.attach(email_content)# 读取"等级一销售表"数据
with open('./static/等级销售表/等级一销售表.xlsx', 'rb') as f:rank_first_data = f.read()# 读取"小组销量排名表"数据
with open('./static/小组销量排名表.xlsx', 'rb') as f:group_rank_data = f.read()# 文件数据字典
file_dict = {'等级一销售表.xlsx': rank_first_data,'小组销量排名表.xlsx': group_rank_data
}
for file in file_dict:# 设置内容类型为附件attachment = MIMEText(file_dict[file], 'base64', 'utf-8')# 设置附件标题以及文件类型attachment.add_header('Content-Disposition', 'attachment', filename=file)# 将附件添加到邮件内容里msg.attach(attachment)
# 发送邮件
smtp.sendmail(account, email_list, msg.as_string())
# 关闭邮箱服务
smtp.quit()

运行效果:

 

可以自行设置邮箱进行验证。

用Python群发邮件相关推荐

  1. Python案例笔记 | 用python群发邮件

    基于Python3版本的学习. 学习知识来源:风变编程 要用python群发邮件,需用到两个python的内置模块. smtplib模块 是用来发送邮件用的. email模块 是用来构建邮件内容的. ...

  2. python群发邮件_python smtp 群发邮件

    最近工作中遇到使用脚本处理问题并发送结果邮件,使用python的smtp模块很简单的完成了实现.今天遇到一个问题,根据脚本的测试结果需要群发邮件,但是发送邮件的py文件只有首个地址收到了邮件.仔细排查 ...

  3. python群发邮件并将excel附件添加到正文

    本文几个目的: 1.使用smtp库群发邮件 2.添加邮件的附件 3.将Excel附件添加到正文中 """ to_addr表示群发集,使用形如('abc.163.com,a ...

  4. Python群发邮件,根据excel内容。

    Python读取excel表中的工资内容,实现工资群发邮件. 前言 目的:读取excel数据中的每个人工资情况,根据每个人的邮箱,实现群发邮件的功能. 参考:廖雪峰 一.准备工作(QQ邮箱为例) 1. ...

  5. python群发邮件1000人-python读取excel群发邮件(一)

    编写背景: ========================= 目前公司的福利饭补是是人力邮件发送的,每个人需要手动对应的发一遍相应的数据,没研究过outlook是否有读取excel群发邮件的功能,看 ...

  6. python群发邮件 不进垃圾箱_实战邮箱群发2000封邮件不进垃圾箱

    作为站长,邮件营销推广是一个比较好的推广工具,而且也是一个相对传统的营销工具,但是并没有过时.运用得好,效果还是很不错得,而且成本相对来说也很非常低的,很适合草根站长前期的推广. 但是我们平时在操作邮 ...

  7. python 群发邮件数量限制_群发邮件-python学习30

    群发邮件 以下是群发邮件的三种思路: 群发邮件 一,是将收件人信箱的变量设置成一个可以装多个内容的列表: 直接运行程序的话,这里就会发生错误:AttributeError: 'list' object ...

  8. 用python群发邮件_使用Python实现电子邮件群发功能

    原标题:使用Python实现电子邮件群发功能 在某些应用中,可能会需要由管理员给所有用法群发电子邮件,或者类似的应用.本文代码使用Python详细模拟了这个过程. importemail fromem ...

  9. python群发邮件 不进垃圾箱_实战干货:邮箱群发2000封邮件如何做到不进垃圾箱...

    原标题:实战干货:邮箱群发2000封邮件如何做到不进垃圾箱 重点导读 很多人认为邮件营销是非常古老的网络营销手段,已经没有多少人在用了.但是有时候招不用新,管用就好. 我们平时在操作邮件群发的时候,大 ...

最新文章

  1. linux 系统邮件 查看清空
  2. leetcode算法题--对链表进行插入排序
  3. java中的易混问题收集
  4. 2019.3.2 区块链论文翻译
  5. Vue入门教程:node安装vue命令行工具及启动项目
  6. 文件指针和文件描述符之间的相互转换 fd----fp 和 fp----fd
  7. Levko and Permutation CodeForces - 361B 思维 数论
  8. python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)
  9. 在php中创建三个表格,创建新工作表PHPExcel
  10. VmWare工作笔记001---弹出错误提示无法连接mks:套接字连接尝试次数太多
  11. less中使用global的两种用法
  12. Eclipse下jsp模板设置
  13. 如何使用JavaScript来判断用户设备类型
  14. 提示Could not calculate build plan Plugin org.apache.maven.pluginsmaven-resources
  15. 使用 Cloudreve 快速搭建一个强大的个人云盘
  16. 功能安全标准-ISO26262-3---概念阶段---ASIL(汽车安全完整性等级)等级确定方法
  17. 服务器监控管理工具大全
  18. Some linux hits
  19. 交互设计之草图、线框图和原型
  20. 3DMax提示缺少Vrey的DLL

热门文章

  1. MySQL及达梦数据库数字金额转人民币大写
  2. cannot be cast to com.baomidou.mybatisplus.core.metadata.IPage
  3. 爬虫——bs4测试——test.html
  4. 达达php源码,达达房卡麻将二次开发VIP系统学习课程
  5. 树莓派网线直连Linux,树莓派+一根网线直连笔记本电脑
  6. vSphere Client中虚拟机与客户机中的剪切板不能够拷贝、粘贴
  7. 如何给电脑硬盘分区?
  8. php memcached 性能测试,多种方法实时监测 Memcached 命中率
  9. 《python深度学习》学习笔记与代码实现(第八章:8.1,8.2,8.3)
  10. eclipse安装angularjs