实战-批量给员工邮箱发工资条

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 国际」许可协议进行许可。

posted @   一只大学生  阅读(14)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示