程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python学习——018一键发送Excel工资条

hfteth 2025-03-20 15:04:05 技术文章 6 ℃

Word中有邮件合并的功能将不同的信息群发给对应的个人,看看用python是怎么实现的:

import pandas as pd
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 读取 Excel 文件
excel_file = pd.ExcelFile('sa_test.xlsx')
df = excel_file.parse()
print(df['月份'])
df['月份'] = pd.to_datetime(df['月份'])
print(df['月份'])
df['月份'] = df['月份'].dt.strftime('%Y年%m月')
print(df)

# QQ 邮箱配置( 这块要替换成自己实际的)
qq_sender_email = "373*648@qq.com" #替换成自己的
qq_sender_password = "ojwxniduzabiej"
qq_smtp_server = "smtp.qq.com"
qq_smtp_port = 465

# 遍历每个人的工资信息并发送邮件
for index, row in df.iterrows():
    month = row['月份']
    name = row['姓名']
    salary = row['工资']
    recipient_email = row['邮箱']
    note = row['备注']
..............................................................................#这块可以根据需要添加字工资表里的字段

    # 构建工资条内容
    salary_info = f"尊敬的 {name},您本月的工资为:{salary} 元\n姓名:  {name}\n工资:  {salary}\n邮箱:  {recipient_email}\n月份:  {month}\n备注:  {note}"

    # 创建邮件对象
    message = MIMEMultipart()
    message["Subject"] = f"{month}工资条通知"

    # 用 QQ 邮箱发送
    message["From"] = qq_sender_email
    sender_email = qq_sender_email
    sender_password = qq_sender_password
    smtp_server = qq_smtp_server
    smtp_port = qq_smtp_port

    message["To"] = recipient_email

    # 添加邮件正文
    message.attach(MIMEText(salary_info, "plain", "utf-8"))











优化点解释



  1. 异常处理细化:原代码使用了通用的 Exception 捕获所有异常,这不利于精准定位问题。优化后的代码对 smtplib.SMTPAuthenticationError(认证失败)和 smtplib.SMTPException(其他 SMTP 相关错误)进行了单独捕获和处理,能更清晰地告知用户错误原因。最后保留一个通用的 Exception 捕获未知类型的错误,防止程序因未预料到的异常而崩溃。

注意事项



  • 请确保 sa_test.xlsx 文件存在,并且文件中包含 月份、姓名、工资、邮箱 和 备注 这些列。
  • 要将 qq_sender_email 和 qq_sender_password 替换为真实有效的 QQ 邮箱地址和对应的授权码。

Tags:

最近发表
标签列表