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(),传入不同的文件路径。
相关推荐
像风一样自由20202 小时前
2.如何用FastAPI把一个Python算法封装成HTTP服务
python·算法·fastapi
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:字典树前缀树与单词检索统计
c++·python·算法·bfs·信息学竞赛
田里的水稻2 小时前
FA_CNN卷积神经网络十八---感知机到多层感知机PyTorch
人工智能·pytorch·python
終不似少年遊*3 小时前
【Skill】为中型研发团队制作的敏捷迭代AI副驾Skill
人工智能·python·华为云·agent·ai编程·skill
呆萌的代Ma3 小时前
python使用ThreadPoolExecutor自带队列将多线程变串行执行
python
echome8883 小时前
Python 正则表达式:5 个日常够用的模式
python·正则表达式
吴名氏.3 小时前
Java转AI Agent教程(第二周)超时重试与错误分类
java·人工智能·python·分类·ai agent
青少儿编程课堂3 小时前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
Eiceblue3 小时前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
Android小码家3 小时前
framework&framework-minus-apex&android.jar的区别
android·python·jar