前言

在现代工作环境中,我们经常需要向多个收件人发送个性化的邮件。通过使用Python编程语言,我们可以自动化这个过程,从Excel文件中读取收件人和相关数据,并发送定制的邮件。

首先,导入所需的库:

import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
from email.header import Header

然后,设置发件人邮箱和密码:

sender_email = 'your_email@example.com'
sender_password = 'your_password'

接下来,设置SMTP服务器和端口号(根据你使用的邮件服务提供商):

smtp_server = 'smtp.example.com'
smtp_port = 587

创建SMTP连接并登录到邮箱:

server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # 开启TLS加密
server.login(sender_email, sender_password)

读取原始Excel文件:

df = pd.read_excel('path_to_excel_file.xlsx')

获取唯一的员工姓名列表:

employee_names = df['员工姓名'].unique()

获取员工姓名和对应的邮箱地址,假设这些信息存储在一个字典中:

employee_emails = {
'张三': 'zhangsan@example.com',
'李四': 'lisi@example.com',
'王五': 'wangwu@example.com',
# 添加更多员工和邮箱信息
}

遍历员工数据并发送邮件:

for employee_name in employee_names:
employee_data = df[df['员工姓名'] == employee_name] # 创建员工的数据 # 生成员工的 Excel 文件
employee_data_filename = f'{employee_name}.xlsx'
employee_data.to_excel(employee_data_filename, index=False) # 创建邮件
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = employee_emails.get(employee_name, '') # 根据员工姓名获取邮箱
msg['Subject'] = '拆分数据通知' body = f"尊敬的{employee_name},您的拆分数据已经准备好,请查收附件。"
msg.attach(MIMEText(body, 'plain')) # 添加附件
with open(employee_data_filename, 'rb') as file:
part = MIMEApplication(file.read(), Name=os.path.basename(employee_data_filename))
part.add_header('Content-Disposition', 'attachment', filename=Header(os.path.basename(employee_data_filename), 'utf-8').encode())
msg.attach(part) # 发送邮件
server.sendmail(sender_email, employee_emails.get(employee_name, ''), msg.as_string()) # 删除生成的员工数据文件
os.remove(employee_data_filename) # 退出SMTP连接
server.quit()

最后,关闭与SMTP服务器的连接。

总结

通过上述Python脚本,我们可以批量发送个性化的邮件。我们首先设置发件人邮箱和密码,然后指定SMTP服务器和端口号。接下来,我们读取包含员工信息的Excel文件,并获取唯一的员工姓名列表和对应的邮箱地址。然后,我们遍历员工数据,并为每个员工创建邮件,附带相应的附件。最后,我们通过SMTP服务器发送邮件,并在发送完成后删除生成的员工数据文件。

完整代码:

import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
from email.header import Header # 设置发件人邮箱和密码
sender_email = 'liuchunlin202205@163.com'
sender_password = '授权码' # 设置SMTP服务器和端口(QQ邮箱的SMTP服务器和端口)
smtp_server = 'smtp.163.com'
smtp_port = 25 # 创建SMTP连接
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # 开启TLS加密 # 登录邮箱
server.login(sender_email, sender_password) # 读取原始 Excel 文件
df = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\测试数据\\员工.xlsx') # 获取唯一的员工姓名列表
employee_names = df['员工姓名'].unique() # 获取员工姓名和对应的邮箱地址,假设这些信息存储在一个字典中
employee_emails = {
'刘备': '2823028760@qq.com',
'孙权': '2823028760@qq.com',
'曹操': '2823028760@qq.com',
# 添加更多员工和邮箱信息
} # 遍历员工数据并发送邮件
for employee_name in employee_names:
# 创建员工的数据
employee_data = df[df['员工姓名'] == employee_name] # 生成员工的 Excel 文件
employee_data_filename = f'{employee_name}.xlsx'
employee_data.to_excel(employee_data_filename, index=False)
employee_data_filename = f'{employee_name}.xlsx' # 创建邮件
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = employee_emails.get(employee_name, '') # 根据员工姓名获取邮箱
msg['Subject'] = '拆分数据通知' body = f"尊敬的{employee_name},您的拆分数据已经准备好,请查收附件。"
msg.attach(MIMEText(body, 'plain')) # 添加附件
with open(employee_data_filename, 'rb') as file:
part = MIMEApplication(file.read(), Name=os.path.basename(employee_data_filename))
part.add_header('Content-Disposition', 'attachment', filename=Header(os.path.basename(employee_data_filename), 'utf-8').encode())
msg.attach(part) # 发送邮件
server.sendmail(sender_email, employee_emails.get(employee_name, ''), msg.as_string()) # 删除生成的员工数据文件
os.remove(employee_data_filename) # 退出SMTP连接
server.quit()

使用Python批量发送个性化邮件的更多相关文章

  1. python实现发送文本邮件

    简单实现了python发送文本邮件 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/4/25 17:09 # @Author ...

  2. cobalt strike批量发送钓鱼邮件

    0×01 利用Cobalt strike生成木马 这里我们生成木马可以用cs带的HTA.OFFICE宏.word宏来使目标上线cs,这里以word宏病毒为例子. 首先我们需要制作一个word宏病毒来进 ...

  3. python 快速发送大量邮件

    因为公司需求,需要发送千万封级别邮件. # coding:utf-8 import csv import smtplib from email.mime.text import MIMEText im ...

  4. python——SMTP发送简单邮件

    [root@localhost python]# cat smtp.py import smtplib import string from email.mime.text import MIMETe ...

  5. python定时利用QQ邮件发送天气预报

    大致介绍 好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下 1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.c ...

  6. Python实现邮件的批量发送

    Python实现邮件的批量发送 1 发送文本信息 '''加密发送文本邮件''' def sendEmail(from_addr,password,to_addr,smtp_server): try: ...

  7. .net 邮件批量发送功能源码

    #define debug   using System; using System.Text; using System.Linq; using System.IO; using System.Ne ...

  8. 使用python发送QQ邮件

    这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText ...

  9. 九、Python发送QQ邮件(SMTP)

    看了廖雪峰老师的教程: 一封电子邮件的旅程就是 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人 ...

  10. python初级实战-----关于邮件发送问题

    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...

随机推荐

  1. MAUI 框架开发 将 MAUI 嵌入到 WPF 控件里

    本文将介绍如何将 MAUI 的底层替换为 WPF 框架层,且将 MAUI 的内容嵌入到 WPF 的一个控件里面,无 UI 框架嵌入的空域问题 本文是 MAUI 框架开发博客,而不是 MAUI 应用开发 ...

  2. Linux0.11内核笔记(-)

    基础知识 C语言.汇编知识.嵌入式汇编.x86处理器和编程的相关知识和.UNIX操作系统设计 Linus在最初开发Linux操作系统时参考了MINIX操作系统:<操作系统:设计与实现>一种 ...

  3. C++与Java共同点

    前言 首先我们来了解一下C++语言,大多人都C++语言是C语言基础上的改编,所以它拥有一个和C语言一样的类似结构,但是它与Java又有不可分割的关系 接下来我们来看几道题: 例如:常数O运行次数与N大 ...

  4. Acwing 周赛88 题解

    比赛链接 ·A题 题目描述 给定一个整数\(x\),请你找到严格大于\(x\)且各位数字均不相同的最小整数\(y\). \(1000 \le x \le 9000\) 做法分析 发现数据范围很小,那么 ...

  5. 超详细的webpack之开始体验吧

    webpack是一个前端工程化非常重要静态模块化打包工具,可以帮我们把 less.sass.esmodule.commonjs 等模块依赖处理成浏览器可识别的静态资源. 虽然webpack非常好用,但 ...

  6. 【pandas小技巧】--字符串转数值

    字符串转数字的用途和场景很多,其中主要包括以下几个方面: 数据清洗:在进行数据处理时,经常会遇到一些数据类型不匹配的问题,比如某些列中的字符串类型被误认为是数字类型,此时需要将这些字符串类型转换为数字 ...

  7. 记录一次解决数据库连接池连接泄露BUG

    1 BUG现象 系统并发请求,系统停滞无法使用,所有接口都是无法与后端进行交互的状态,系统并没有宕机 2 BUG的业务流程 插入分数方法 涉及插入表ABCD 加了声明式事务 查询分数方法 涉及表ABC ...

  8. 免费拥有自己的 Github 资源加速器

    TurboHub 是一个免费的 Github 资源加速下载站点,可以帮助你快速下载 Github 上的资源.其核心逻辑是通过 Azure Static Web Apps 服务和 Azure Funct ...

  9. 【腾讯云 Cloud Studio 实战训练营】在线 IDE 编写 canvas 转换黑白风格头像

    关于 Cloud Studio Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站.用户在使用Cloud Studio 时无需安装,随时随地打开浏 ...

  10. Redis系列20:LFU内存淘汰算法分析

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...