python识别outlook邮件并且将pdf文件作为附件发送邮件

为了发送 PDF 文件作为附件,可以在代码的邮件发送部分添加附件功能。以下是更新后的代码,展示如何将 PDF 文件作为附件发送。

修改后的代码

python 复制代码
import win32com.client
import pythoncom
import os

class OutlookEventHandler:
    def __init__(self, specified_email, pdf_path):
        self.specified_email = specified_email
        self.pdf_path = pdf_path
        self.outlook = win32com.client.DispatchWithEvents(
            "Outlook.Application", EventSink
        )
        EventSink.specified_email = specified_email
        EventSink.pdf_path = pdf_path
        EventSink.outlook = self.outlook

class EventSink:
    specified_email = None
    pdf_path = None
    outlook = None

    def OnNewMailEx(self, EntryIDCollection):
        """
        This event is triggered whenever a new email is received.
        """
        namespace = self.outlook.GetNamespace("MAPI")
        for entry_id in EntryIDCollection.split(","):
            mail_item = namespace.GetItemFromID(entry_id)
            if mail_item.Class == 43:  # Check if it's an email item
                self.process_email(mail_item)

    def process_email(self, mail_item):
        """
        Process the received email and send a new email with a PDF attachment.
        """
        subject = mail_item.Subject
        sender = mail_item.SenderEmailAddress
        body = mail_item.Body

        # Example check logic (you can customize this)
        if "urgent" in subject.lower():
            self.send_email(sender, subject)

    def send_email(self, sender, subject):
        """
        Send a new email to the specified address with a PDF attachment.
        """
        mail = self.outlook.CreateItem(0)  # 0: olMailItem
        mail.To = self.specified_email
        mail.Subject = f"Notification: Email from {sender}"
        mail.Body = f"Received an email with subject: {subject}"

        # Add PDF attachment
        if os.path.exists(self.pdf_path):
            mail.Attachments.Add(self.pdf_path)
        else:
            print(f"Attachment file not found: {self.pdf_path}")

        mail.Send()
        print(f"Notification with attachment sent to {self.specified_email}.")

if __name__ == "__main__":
    SPECIFIED_EMAIL = "example@domain.com"
    PDF_PATH = "C:\\path\\to\\your\\file.pdf"  # Update this to your PDF file path

    if not os.path.exists(PDF_PATH):
        print(f"Error: PDF file not found at {PDF_PATH}")
    else:
        print(f"Listening for new emails. Notifications with attachment will be sent to {SPECIFIED_EMAIL}.")
        event_handler = OutlookEventHandler(SPECIFIED_EMAIL, PDF_PATH)

        # Keep the script running to listen for new emails
        pythoncom.PumpMessages()

关键变化

  1. 附件路径
    • 在初始化时传入 PDF 文件的路径。
    • 确保路径合法且文件存在,使用 os.path.exists() 进行验证。
  2. 添加附件
    • 使用 mail.Attachments.Add(self.pdf_path) 添加附件。
    • 在发送邮件前,检查附件路径是否有效。

注意事项

  1. 附件大小:Outlook 邮件附件大小有限制,确保 PDF 文件符合限制。
  2. 文件路径:使用绝对路径,避免路径解析问题。
  3. 多附件支持 :如果需要添加多个附件,可以多次调用 mail.Attachments.Add(),传入不同的文件路径。
相关推荐
允许部分打工人先富起来33 分钟前
在node项目中执行python脚本
前端·python·node.js
IVEN_36 分钟前
Python OpenCV: RGB三色识别的最佳工程实践
python·opencv
haosend1 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽2 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
IVEN_19 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang21 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮21 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling21 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮1 天前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维