Eks6666 发表于 2024-7-4 09:56

python拆分Excel数据,自动发邮箱


import pandas as pd
import poplib
import email
from email.header import decode_header
from email.parser import Parser
df = pd.read_excel("年假明细表.xlsx")
depts = df["部门"].unique()
for dept in depts:
    department_df = df == dept]
    filename = f"{dept}_年假情况.xlsx"
    department_df.to_excel(filename, index=False)

def send_email_with_attachment(
      sender_email, recipient_email, subject, body, attachment_path, userName_AuthCode, attach_name):
    # 邮箱服务端

    message = MIMEMultipart()
    # email = MIMEText(content, 'plain', 'utf-8')
    message['Subject'] = subject# 定义邮件主题
    message['From'] = "AI通知机器人"# 发件人
    message['To'] = ",".join(recipient_email)# 收件人(可以添加多个,若只有一个收件人,可直接写邮箱号)
    body = body
    # 邮件正文
    message.attach(MIMEText(body, 'plain'))
    # 发送邮件

    attachment = open(attachment_path, "rb")
    part = MIMEBase("application", "octet-stream")
    # 设置附件信息
    part.set_payload((attachment).read())

    encoders.encode_base64(part)
    part.add_header("Content-Disposition",
                  "attachment; filename=attach_name")
    message.attach(part)

    # 添加附件到邮件
    # message.attach(part)
    # QQ邮箱的端口号是465,其他邮箱的端口号可自行百度,非QQ邮箱,一般使用SMTP即可,不需要有SSL
    smtp = smtplib.SMTP_SSL(mailserver, port=465)
    smtp.login(sender_email, userName_AuthCode)
    smtp.sendmail(sender_email, ','.join(
      recipient_email), message.as_string())

    smtp.quit()
    # logging.info('恭喜,邮件发送成功了')
if __name__ == "__main__":
    # split_Excel("年假情况.xlsx", "年假_按部门汇总")
    mailserver = 'smtp.163.com'
    # 发件人-填写自己的邮箱
    sender_email = 'zdy15921159716@163.com'
    # 邮箱发件授权码-为发件人生成的授权码,具体步骤见文章中截图
    userName_AuthCode = 'OCRSEVQEMWCIXKNY'
    # 定义邮件的接收者-我随便写的,若收件人较多,可用列表表示
    # recipient_email = ['young@realstarie.com']
    subject = '你们部门的年假情况'
    body = '附件是你们部门的年年假情况,请查阅'

    department_emails = {
      "采购部": ['young@realstarie.com', "865193996@qq.com"],# 可以添加多个收件人
      "船务部": ['young@realstarie.com'],
      # ...其他部门
    }
    df = pd.read_excel("年假情况.xlsx")
    depts = ["采购部", "船务部"]
    for dept in depts:
      attachment_path = f'年假_按部门汇总\年假情况_{dept}.xlsx'# 附件路径
      recipient_email = department_emails.get(dept)
      print(recipient_email)
      attach_name = f"年假情况_{dept}"
      send_email_with_attachment(
            sender_email, recipient_email, subject, body, attachment_path, userName_AuthCode, attach_name)

zylz9941 发表于 2024-7-4 11:54

小白坐等成品

prience0118 发表于 2024-7-4 15:38

可以搞个钉钉,或者飞书一起发

lastmu 发表于 2024-7-4 19:17

我也搬个小板凳。

lvtaode0657 发表于 2024-7-4 19:21

直接使用zmail包应该更简单一些。

beyond0772 发表于 2024-7-5 22:30

学习学习。

Eks6666 发表于 2024-7-5 23:49

beyond0772 发表于 2024-7-5 22:30
学习学习。

可以的,铁子

thornjay 发表于 2024-7-22 10:00

学习学习学习

tnancy2kk 发表于 2024-7-23 11:45

看起来不错,学习一下

arpeeee 发表于 2024-7-23 17:38

学习学习
页: [1] 2
查看完整版本: python拆分Excel数据,自动发邮箱