用Python实现群发邮件

目录
  • 群发邮件
  • 登录邮箱
  • 设置邮件信息及正文文本
  • 设置附件
  • 发送邮件并关闭邮箱服务
  • 项目总结
  • 完整代码:

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

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

群发邮件

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() 

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

登录邮箱

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

import smtplib

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

设置邮件信息及正文文本

先定义一个空列表用于存放组长邮箱,遍历【组长邮箱.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)

设置附件

接下来就是把【等级一销售表.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)

发送邮件并关闭邮箱服务

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

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

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

项目总结

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

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

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

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

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

完整代码:

from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

email_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实现群发邮件的文章就介绍到这了,更多相关Python群发邮件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 统计Jira的bug 并发送邮件功能

    1.首先在pycharm上使用pip安装 pip install html-table pip install jira 2.初始化发件人邮箱,账号,密码 # 发件人邮箱账号 my_sender = 'username@xxx.com.cn' # user登录邮箱的用户名,password登录邮箱的密码(授权码,即客户端密码,非网页版登录密码),但用腾讯邮箱的登录密码也能登录成功 my_pass = 'xxxxx' # 收件人邮箱账号 my_users=['username@xxx.com.cn

  • Python实现自动化发送邮件

    目录 开门见山 自动化发送邮件SMTP 介绍 开启SMTP服务 邮件的属性配置 发送文本邮件 发送HTML邮件 发送附件邮件 后记 总结 开门见山 自动化测试过程中,一般测试结果都会以邮件的形式发送给相关人员,那么,在Python中,如何编写代码将邮件发送给对应的用户? 同时,发送邮件时又有不同的形式,比如:文本.HTML.图片附件.非图片附件等,这些又是如何操作的呢?下面我们一起来学习学习~ 自动化发送邮件SMTP 介绍 SMTP中文名为简单邮件传输协议,是一种提供可靠且有效的电子邮件传输的协

  • Python实现定时发送监控邮件

    目录 一.自动定时任务运行详情 二.开启POP3/SMTP服务 三.发送邮件 1 导入库 2 设置邮件内容 3 添加附件 4 发送邮件 5 邮件发送效果 四.设置定时任务 1 设置定时任务的具体步骤 2 设置定时任务的教学视频 不管是在信贷领域还是支付领域,作为一个风控人员,我们都需要对部署的策略模型进行监控,信贷领域可能还需要对客户的逾期表现进行监控.这时,如果我们能用python自动连接数据库,对策略.模型.贷后表现等数据进行分析处理,输出标准表格或图片到固定文件夹中.再用python自动定

  • 用Python自动发邮件提醒你周末吃啥

    目录 前言 实现思路 实现过程 总结 前言 前几天在Python交流群里边,大佬分享了一个有趣的代码,用于定时发送菜谱分享,觉得挺有意思,这里拿出来给大家分享. 实现思路 实现思路倒是不难,其一是Python网络爬虫,将网页上的每日一文抓取到,然后存起来到一个变量中,其二是编写发送邮件的逻辑,编辑好邮寄模板,然后将抓到的内容发送出去即可. 实现过程 这里直接上代码,如下所示: import requests, bs4 import smtplib import schedule import t

  • python实现QQ邮箱群发邮件实例

    目录 一,登录邮箱,获取授权码 二,替换参数 总结 一,登录邮箱,获取授权码 二,替换参数 给多人发送邮箱,我只是做了个循环,把每个人得授权码循环输入了.把授权码和邮箱替换成自己得就行,内容你可以自己定义 import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from emai

  • 用Python实现群发邮件

    目录 群发邮件 登录邮箱 设置邮件信息及正文文本 设置附件 发送邮件并关闭邮箱服务 项目总结 完整代码: 我们需要将[小组销量排名表.xlsx]通过邮件发送给[组长邮箱.xlsx]中的各个组长. 这里会学一个新的知识点——str.join(),通过它实现群发邮件的功能. 群发邮件 from openpyxl import load_workbook import smtplib from email.mime.text import MIMEText from email.mime.multip

  • Python群发邮件实例代码

    直接上代码了 复制代码 代码如下: import smtplibmsg = MIMEMultipart() #构造附件1att1 = MIMEText(open('/home/a2bgeek/develop/python/hello.py', 'rb').read(), 'base64', 'gb2312')att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] = '

  • python给指定csv表格中的联系人群发邮件(带附件的邮件)

    以下为使用python给指定路径的csv表格中的联系人群发带附件的邮件(csv表格的第一列为联系人姓名,第二列为联系人邮箱账号)的代码,详情见注释. import time import csv #用于读取收件人列表 import smtplib #用于发送邮件 from email.header import Header #Header用于构造邮件头 from email.mime.text import MIMEText #MIMEText用于构造文本邮件 from email.mime.

  • Python自动化办公之群发邮件案例详解

    目录 背景 实现过程 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换,之后将Word转Pdf格式,然后复制Excel表格中的邮箱进行发送编辑好的邮件正常,之后附上邀请函附件,

  • Python使用smtplib 实现单发和群发邮件验证码

    目录 smtplib库 SMTP 邮件服务器 实战 1.126邮箱一般默认关闭SMTP服务,我们得先去开启它 2.Python代码 前言: Python smtplib 教程:展示了如何使用 smtplib 模块在 Python 中发送电子邮件. 要发送电子邮件,我们使用 Python 开发服务器,Mailtrap 在线服务和共享的网络托管邮件服务器. smtplib库 python发送邮件需要用到smtplib库,先简单了解一下 SMTP 简单邮件传输协议(SMTP)是用于电子邮件传输的通信协

  • Python发送Email方法实例

    本文以实例形式展示了Python发送Email功能的实现方法,有不错的实用价值的技巧,且功能较为完善.具体实现方法如下: 主要功能代码如下: #/usr/bin/env python # -*- encoding=utf-8 -*- import base64 import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText class CCSendMail: de

  • 使用Python发送各种形式的邮件的方法汇总

    我们平时需要使用 Python 发送各类邮件,这个需求怎么来实现?答案其实很简单,smtplib 和 email 库可以帮忙实现这个需求.smtplib 和 email 的组合可以用来发送各类邮件:普通文本,HTML 形式,带附件,群发邮件,带图片的邮件等等.我们这里将会分几节把发送邮件功能解释完成. smtplib 是 Python 用来发送邮件的模块,email 是用来处理邮件消息. 发送 HTML 形式的邮件 发送 HTML 形式的邮件,需要 email.mime.text 中的 MIME

  • Python自动发邮件脚本

    缘起 这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月,看看效果再拓展吧. 脚本主要是通过Python写的,调的smtplib库,这些是基础,大家在网上一搜一大堆,今天主要给大家讲解下如何避免进入垃圾邮件系统,以及整个系统搭建时的一些思想.可能刚搞Python不久,有很多可能是错误的写法望大家提出来哈~ 配置 CentOS7.0系统 Python 3.4

  • python自动发邮件库yagmail的示例代码

    之前使用的python的smtplib.email模块发模块的一步步骤是: 一.先导入smtplib模块  导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以126为例子百度搜索服务器是  smtp.126.com 三.写邮件主题和正文,这里的正文是HTML格式的 四.最后调用SMTP发件服务 一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text im

随机推荐