实战-批量给员工邮箱发工资条
qq邮箱不支持批量发送,163成功
生成模拟员工工资条xlsx文件#
from openpyxl import Workbook
# 生成模拟工资条数据
wb = Workbook()
sheet = wb.active
# 生成员工信息
sheet.title = "员工工资"
title_str = "序号,邮箱,姓名,应发,实发"
title_list = title_str.split(",") # ['序号', '邮箱', '姓名', '应发', '实发']
# 写入第一行标题
# enumerate函数用于将一个可遍历的数据对象(如列表、元组、字符串等)组合为一个索引序列,同时返回数据对象中每个元素的索引和元素值。
for i, value in enumerate(title_list, start=1):
sheet.cell(row=1, column=i, value=value)
# 生成10列数据
for col_id in range(1, 6):
# 生成2-11十行数据
for row_id in range(2, 12):
sheet.cell(column=col_id, row=row_id, value=row_id)
# 将第二列变为邮箱
for row in sheet.iter_rows(min_row=2, min_col=2, max_col=2):
row[0].value = "2694551335@qq.com"
wb.save("员工工资条.xlsx")
批量发送【运行时发现报错:smtplib.SMTPSenderRefused】#
论坛说qq现在不支持单线程批量发送,可以看看逻辑
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 1.设置发送邮件的服务器,登录
smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', '465') # 465是服务器端口
smtp_obj.login('2694551335@qq.com', 'cqfuygtlcmbkdfdi') # 这里的密码是授权码,需从"qq邮箱配置SMTP"获取
# 2.加载excel文件
wb = load_workbook('员工工资条.xlsx')
sheet = wb.active
# 生成thead_str
thead_str = ""
for row in sheet.iter_rows(max_row=1):
for cell in row:
thead_str += f"<td>{cell.value}</td>"
# 3.循环给每个人发邮件
for row in sheet.iter_rows(min_row=2, max_row=3):
staff_name = row[2].value # 拿到员工姓名
staff_email = row[1].value # 拿到员工邮箱
# 生成tbody_str
tbody_str = "<tr>"
for cell in row:
tbody_str += f"<td>{cell.value}</td>"
tbody_str += "</tr>"
# a.构建邮件正文
mail_body = f"""
<table>
<h1>发工资啦,请查收</h1>
<table border="1px">
<thead>
<tr>
{thead_str}
</tr>
</thead>
<tbody>
{tbody_str}
</tbody>
</table>
"""
# print(1)
# b.构建邮件
msg = MIMEText(mail_body, 'html', 'utf-8') # 设置邮件内容 参数解释:邮件内容,文本格式,编码格式
msg["From"] = Header('2694551335@qq.com') # 设置发送者邮箱
msg["To"] = Header(staff_email) # 设置收件者邮箱
msg["Subject"] = Header("发工资啦", "utf-8") # 设置邮件主题
# c.发送
smtp_obj.sendmail('2694551335@qq.com', [staff_email,], msg.as_string())
print(f"给{staff_name}发送邮件成功!")
多线程依旧不行#
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import threading
import time
def post_email(staff_name, staff_email, tbody_str, thead_str, row):
for cell in row:
tbody_str += f"<td>{cell.value}</td>"
tbody_str += "</tr>"
# a.构建邮件正文
mail_body = f"""
<table>
<h1>发工资啦,请查收</h1>
<table border="1px">
<thead>
<tr>
{thead_str}
</tr>
</thead>
<tbody>
{tbody_str}
</tbody>
</table>
"""
# print(1)
# b.构建邮件
msg = MIMEText(mail_body, 'html', 'utf-8') # 设置邮件内容 参数解释:邮件内容,文本格式,编码格式
msg["From"] = Header('2694551335@qq.com') # 设置发送者邮箱
msg["To"] = Header(staff_email) # 设置收件者邮箱
msg["Subject"] = Header("发工资啦", "utf-8") # 设置邮件主题
# c.发送
smtp_obj.sendmail('2694551335@qq.com', [staff_email,], msg.as_string())
print(f"给{staff_name}发送邮件成功!")
# 1.设置发送邮件的服务器,登录
smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', '465') # 465是服务器端口
smtp_obj.login('2694551335@qq.com', 'cqfuygtlcmbkdfdi') # 这里的密码是授权码,需从"qq邮箱配置SMTP"获取
# 2.加载excel文件
wb = load_workbook('员工工资条.xlsx')
sheet = wb.active
# 生成thead_str
thead_str = ""
for row in sheet.iter_rows(max_row=1):
for cell in row:
thead_str += f"<td>{cell.value}</td>"
# 3.循环给每个人发邮件
thread_list = []
for row in sheet.iter_rows(min_row=2, max_row=3):
staff_name = row[2].value # 拿到员工姓名
staff_email = row[1].value # 拿到员工邮箱
# 生成tbody_str
tbody_str = "<tr>"
# 发送邮件
t = threading.Thread(target=post_email, args=(staff_name, staff_email, tbody_str, thead_str, row))
t.start()
thread_list.append(t)
# 等待线程结束
for thread in thread_list:
thread.join()
163邮箱批量发送【成功!】#
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 1.设置发送邮件的服务器,登录
smtp_obj = smtplib.SMTP_SSL('smtp.163.com', '465') # 使用网易163邮箱 465是服务器端口
smtp_obj.login('15239889618@163.com', 'DMmYK4Xp3nWhgLrK') # 你的邮箱 这里的密码是授权码
# 2.加载excel文件
wb = load_workbook('员工工资条.xlsx')
sheet = wb.active
# 生成邮件内容:表格中的标题(thead_str)
thead_str = ""
for row in sheet.iter_rows(max_row=1):
for cell in row:
thead_str += f"<td>{cell.value}</td>"
# 3.循环给每个人发邮件
for row in sheet.iter_rows(min_row=2, max_row=3):
staff_name = row[2].value # 拿到员工姓名
staff_email = row[1].value # 拿到员工邮箱
# 生成邮件内容:表格中的数据(tbody_str)
tbody_str = "<tr>"
for cell in row:
tbody_str += f"<td>{cell.value}</td>"
tbody_str += "</tr>"
# a.构建邮件正文
mail_body = f"""
<table>
<h1>发工资啦,请查收</h1>
<table border="1px">
<thead>
<tr>
{thead_str}
</tr>
</thead>
<tbody>
{tbody_str}
</tbody>
</table>
"""
# b.构建邮件
msg = MIMEText(mail_body, 'html', 'utf-8') # 设置邮件内容 参数:邮件内容,文本格式,编码格式
msg["From"] = Header('15239889618@163.com') # 设置发送者邮箱
msg["To"] = Header(staff_email) # 设置收件者邮箱
msg["Subject"] = Header("发工资啦", "utf-8") # 设置邮件主题
# c.发送
smtp_obj.sendmail('15239889618@163.com', [staff_email,], msg.as_string()) # 发送者邮箱 接收者邮箱列表 固定参数
print(f"给{staff_name}发送邮件成功!")
作者:cloud-2-jane
出处:https://www.cnblogs.com/cloud-2-jane/articles/18560858
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架