经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
使用Python批量发送个性化邮件
来源:cnblogs  作者:qwerrt9  时间:2023/11/1 9:00:36  对本文有异议

前言

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

首先,导入所需的库:

  1. import pandas as pd
  2. import smtplib
  3. from email.mime.multipart import MIMEMultipart
  4. from email.mime.text import MIMEText
  5. from email.mime.application import MIMEApplication
  6. import os
  7. from email.header import Header

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

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

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

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

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

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

读取原始Excel文件:

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

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

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

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

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

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

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

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

总结

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

完整代码:

  1. import pandas as pd
  2. import smtplib
  3. from email.mime.multipart import MIMEMultipart
  4. from email.mime.text import MIMEText
  5. from email.mime.application import MIMEApplication
  6. import os
  7. from email.header import Header
  8. # 设置发件人邮箱和密码
  9. sender_email = 'liuchunlin202205@163.com'
  10. sender_password = '授权码'
  11. # 设置SMTP服务器和端口(QQ邮箱的SMTP服务器和端口)
  12. smtp_server = 'smtp.163.com'
  13. smtp_port = 25
  14. # 创建SMTP连接
  15. server = smtplib.SMTP(smtp_server, smtp_port)
  16. server.starttls() # 开启TLS加密
  17. # 登录邮箱
  18. server.login(sender_email, sender_password)
  19. # 读取原始 Excel 文件
  20. df = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\测试数据\\员工.xlsx')
  21. # 获取唯一的员工姓名列表
  22. employee_names = df['员工姓名'].unique()
  23. # 获取员工姓名和对应的邮箱地址,假设这些信息存储在一个字典中
  24. employee_emails = {
  25. '刘备': '2823028760@qq.com',
  26. '孙权': '2823028760@qq.com',
  27. '曹操': '2823028760@qq.com',
  28. # 添加更多员工和邮箱信息
  29. }
  30. # 遍历员工数据并发送邮件
  31. for employee_name in employee_names:
  32. # 创建员工的数据
  33. employee_data = df[df['员工姓名'] == employee_name]
  34. # 生成员工的 Excel 文件
  35. employee_data_filename = f'{employee_name}.xlsx'
  36. employee_data.to_excel(employee_data_filename, index=False)
  37. employee_data_filename = f'{employee_name}.xlsx'
  38. # 创建邮件
  39. msg = MIMEMultipart()
  40. msg['From'] = sender_email
  41. msg['To'] = employee_emails.get(employee_name, '') # 根据员工姓名获取邮箱
  42. msg['Subject'] = '拆分数据通知'
  43. body = f"尊敬的{employee_name},您的拆分数据已经准备好,请查收附件。"
  44. msg.attach(MIMEText(body, 'plain'))
  45. # 添加附件
  46. with open(employee_data_filename, 'rb') as file:
  47. part = MIMEApplication(file.read(), Name=os.path.basename(employee_data_filename))
  48. part.add_header('Content-Disposition', 'attachment', filename=Header(os.path.basename(employee_data_filename), 'utf-8').encode())
  49. msg.attach(part)
  50. # 发送邮件
  51. server.sendmail(sender_email, employee_emails.get(employee_name, ''), msg.as_string())
  52. # 删除生成的员工数据文件
  53. os.remove(employee_data_filename)
  54. # 退出SMTP连接
  55. server.quit()

 

原文链接:https://www.cnblogs.com/lcl-cn/p/17801752.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号