吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 847|回复: 11
收起左侧

[资源求助] 求发工资条的小程序,可以发送给每个人的邮箱

[复制链接]
cksincerely 发表于 2024-3-26 15:44
50吾爱币
有没有大佬弄一个发工资条的小程序,可以发送给每个人的邮箱。大概10列左右。主要包括以下
姓名  工龄工资  补贴1 补贴2 补贴3 补贴4 补贴5 补贴6 补贴7 补贴8 补贴9 补贴10 总计  电子邮箱


有大佬发过类似的,但是我看不懂,不会弄。求支招
见贴https://www.52pojie.cn/forum.php?mod=viewthread&tid=1828552&highlight=%B9%A4%D7%CA

最佳答案

查看完整内容

[md]参考楼主发的链接,简单调整了下。支持自动识别列来作为邮件内容。 三个文件: - main.py:群发工资条 - esender.py:邮件工具 - data_tpl.csv: 示例数据 下载后修改main.py中的发送邮件配置和data.csv即可。 > 特别说明: 1. 需要将工资表格另存为csv文件,并重命名为data.csv 2. 不支持多行合并表头,请简化为单行单列表头,参考data_tpl.csv 3. 发送邮箱测试过qq邮箱,其他的自行测试 esender.py ``` ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

woaipoie 发表于 2024-3-26 15:44

参考楼主发的链接,简单调整了下。支持自动识别列来作为邮件内容。

三个文件:

  • main.py:群发工资条
  • esender.py:邮件工具
  • data_tpl.csv: 示例数据

下载后修改main.py中的发送邮件配置和data.csv即可。

特别说明:

  1. 需要将工资表格另存为csv文件,并重命名为data.csv
  2. 不支持多行合并表头,请简化为单行单列表头,参考data_tpl.csv
  3. 发送邮箱测试过qq邮箱,其他的自行测试

esender.py

import smtplib  
from email.mime.text import MIMEText  
from email.header import Header  
import re  
import base64

class EmailSender:  
    def __init__(self, user,user_name, password):  
        self.user = user  
        self.user_name = user_name
        self.password = password  
        self.smtp_server = self._get_smtp_server(user)  

    def _get_smtp_server(self, user):  
        # 根据邮箱地址判断SMTP服务器  
        if re.match(r'.*@qq\.com$', user):  
            return 'smtp.qq.com'  
        elif re.match(r'.*@163\.com$', user):  
            return 'smtp.163.com'  
        elif re.match(r'.*@example\.com$', user):  # 示例企业邮箱,需要替换为实际的企业邮箱域名  
            return 'smtp.example.com'  
        else:  
            raise ValueError("Unsupported email domain")  

    def send_email(self, reciver_name, receiver, cc_name, cc, subject, content):  
        message = MIMEText(content, 'html', 'utf-8')
        if self.smtp_server == 'stmp.qq.com':
            message['From'] = Header(f'''=?UTF-8?B?{base64.b64encode(self.user_name.encode("utf-8"))}?= <{self.user}>''') 
        else:
            message['From'] = Header(f'''{self.user_name} <{self.user}>''', 'utf-8') 
        message['To'] = Header(f'''{reciver_name} <{receiver}>''', 'utf-8')
        message["Cc"] = Header(f'''{cc_name} <{cc}>''', "utf-8")
        message['Subject'] = Header(subject, 'utf-8')  

        try:  
            if self.smtp_server in ['smtp.qq.com', 'smtp.163.com']:  
                # 使用SSL方式登录邮箱,发送邮件,端口通常是465  
                with smtplib.SMTP_SSL(self.smtp_server, 465) as smtp_obj:  
                    smtp_obj.login(self.user, self.password)  
                    smtp_obj.sendmail(self.user, [receiver, cc], message.as_string())  
            else:  
                # 对于企业邮箱或其他邮箱,可能需要使用不同的端口和加密方式,这里只是示例  
                with smtplib.SMTP(self.smtp_server, 587) as smtp_obj:  
                    smtp_obj.starttls()  # 启动TLS加密,端口通常是587  
                    smtp_obj.login(self.user, self.password)  
                    smtp_obj.sendmail(self.user, [receiver, cc], message.as_string())  
            print('邮件发送成功!')  
        except smtplib.SMTPException as e:  
            print('邮件发送失败,错误信息:', e)  

main.py

#引用系统操作模块
import os
# 导入邮件发送方法
import esender
# 引入时间方法
import datetime
import time
now_time = datetime.datetime.now()  # 获得当前时间
pay_month = datetime.datetime.now() - datetime.timedelta(28)
sent_time = time.time()

# 发送者邮箱配置
sender_name = "财务"
sender_email = "caiwu@qq.com"
sender_email_pwd = "rumpbwnkpbzkbxxx"

# 抄送邮箱配置
cc_name = "领导"
cc = "lindao@qq.com"

#声明文件
print(f'''
****************************************************************************************
使用说明:
1、用于批量发送工资条,自动识别数据列
2、文件请另存为csv文件
3、格式要求:姓名必须为第二列,邮箱必须为组后一列
''')

#判断文件是否存在
if os.path.exists("data.csv"):
    wb = open("data.csv", mode='r', encoding="utf-8")
else:
    input("数据文件 data.csv 不存在,请检查后重新运行本程序,程序结束,按回车退出程序")
    exit()

# 登录邮件服务器
# 使用示例  
email_sender = esender.EmailSender(sender_email, sender_name, sender_email_pwd)  

# 读取表头
header_txt = wb.readline()
header = header_txt.split(",")

thead_html = ""
for th in header[:-1]:
    thead_html += f'''
    <th style="border: 1px solid #cad9ea; height: 30px;">{th.strip()}</th>
    '''

# 读取数据并发送邮件
for row_txt in wb.readlines():
    row = row_txt.split(",")
    mail_content = ""

    tbody_html = ""
    for td in row[:-1]:
        tbody_html += f'''
        <td style="border: 1px solid #cad9ea;  height: 30px;">{td.strip()}</td>
        '''
    # 注意!姓名必须为第二列
    name = row[1].strip()
    # 注意!邮箱必须为组后一列
    reciver = row[-1].strip()
    # 构建邮件内容
    mail_content = f'''<p>  {name} 你好!{pay_month.year}年{pay_month.month}月工资表 </p>
            <table width="95%" style="border-collapse: collapse; margin: 0 auto; text-align: center ">
                <caption>
                <h2> {name}{pay_month.year}年{pay_month.month}月工资表</h2>
                </caption>
                <thead><tr style="background: #3271AE; color: #FFF; font-size: 16px;">{thead_html}</tr></thead>
                <tbody><tr>{tbody_html}</tr></tbody>
            </table>
        '''
    # 发送邮件
    email_sender.send_email(name, reciver,cc_name, cc, f"{name} {pay_month.year}年{pay_month.month}月份工资条", mail_content)

    # 写日志
    log = f"发送时间:{now_time}  收件人:{name} 邮件地址:{reciver} 邮件主题:{pay_month.year}年{pay_month.month}月份工资表记录 己发送\n"
    f = open(file='sentlog.log', mode='a', encoding='utf-8')
    f.write(log)
    f.close()
    print(log)
wait = input("程序执行完毕,按回车键退出!")

data_tpl.csv

姓名,工龄工资,补贴1,补贴2,补贴3,补贴4,补贴5,总计,电子邮箱
张三,1100,20,20,1001,20,100,100,123456@qq.com
李四,1100,20,20,1001,20,100,100,123456@qq.com
jtq1234 发表于 2024-3-26 15:47
yinxing 发表于 2024-3-26 15:48
 楼主| cksincerely 发表于 2024-3-26 15:49
jtq1234 发表于 2024-3-26 15:47
这还要扯到小程序,不是复杂化了吗。
看这里
https://search.bilibili.com/all?keyword=%E5%B7%A5%E8%B5% ...

看到一个人留言的,想要一个这种
工资条有两种形式,一种是一个excel 文件里 读出来数值然后拼合出一个HTML文档 发给个人邮件。
另一种是每人一个excel文件,读文件判断发送到企业邮箱。不知道你需要哪种?

我们单位用的就是我用python 手搓的,然后打个exe的包,财务只需要把 工资的excel与小程序放一起 运行一下就OK了。
jtq1234 发表于 2024-3-26 15:51
好吧,我们单位比较老式。。
内网HTML发邮件
cirmic 发表于 2024-3-26 16:27
我觉得在WPS里,会员功能里有一个“群发工具”中的功能就是你要的功能
 楼主| cksincerely 发表于 2024-3-26 16:37
cirmic 发表于 2024-3-26 16:27
我觉得在WPS里,会员功能里有一个“群发工具”中的功能就是你要的功能

哈哈,就是这个功能,一年500多,想省下来加鸡腿
elceric 发表于 2024-3-26 17:17
其实不用第三方也可以试试。也可以考虑EXCEL表格数据,然后直接利用WORD的引用选项卡下面的邮件功能。免费版WPS也有这个功能的。
woaipoie 发表于 2024-3-26 21:58
woaipoie 发表于 2024-3-26 21:55
[md]参考楼主发的链接,简单调整了下。支持自动识别列来作为邮件内容。

三个文件:

邮件效果:
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 18:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表