实战-批量给员工邮箱发工资条
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}发送邮件成功!")

浙公网安备 33010602011771号