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(),传入不同的文件路径。
相关推荐
心态特好42 分钟前
详解WebSocket及其妙用
java·python·websocket·网络协议
dlraba8021 小时前
用 Python+OpenCV 实现实时文档扫描:从摄像头捕捉到透视矫正全流程
开发语言·python·opencv
小熊出擊2 小时前
【pytest】fixture 内省(Introspection)测试上下文
python·单元测试·pytest
njsgcs2 小时前
sse mcp flask 开放mcp服务到内网
后端·python·flask·sse·mcp
一人の梅雨2 小时前
1688 店铺商品全量采集与智能分析:从接口调用到供应链数据挖掘
开发语言·python·php
Terio_my3 小时前
Python制作12306查票工具:从零构建铁路购票信息查询系统
开发语言·python·microsoft
万粉变现经纪人3 小时前
如何解决 pip install -r requirements.txt 约束文件 constraints.txt 仅允许固定版本(未锁定报错)问题
开发语言·python·r语言·django·beautifulsoup·pandas·pip
站大爷IP3 小时前
Python定时任务实战:APScheduler从入门到精通
python
Fairy_sevenseven3 小时前
[1]python爬虫入门,爬取豆瓣电影top250实践
开发语言·爬虫·python
ThisIsMirror3 小时前
CompletableFuture并行任务超时处理模板
java·windows·python