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(),传入不同的文件路径。
相关推荐
小W与影刀RPA4 分钟前
【影刀RPA】:智能过滤敏感词,高效输出表格
大数据·人工智能·python·低代码·自动化·rpa·影刀rpa
J_liaty5 分钟前
Java实现PDF添加水印的完整方案(支持灵活配置、平铺、多页策略)
java·开发语言·pdf
Yorlen_Zhang9 分钟前
python Tkinter Frame 深度解析与实战指南
开发语言·python
2401_8384725110 分钟前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
德育处主任Pro19 分钟前
『NAS』告别付费和广告,在群晖部署PDF工具箱-bentopdf
pdf·nas
2301_8223636026 分钟前
Python单元测试(unittest)实战指南
jvm·数据库·python
叫我辉哥e136 分钟前
新手进阶Python:办公看板升级交互式可视化+移动端适配+多终端同步
开发语言·python
m0_5613596736 分钟前
Python面向对象编程(OOP)终极指南
jvm·数据库·python
zhangfeng113337 分钟前
deepseek部署和训练的PyTorch CUDA Transformers Accelerate PEFT稳定版本呢推荐
人工智能·pytorch·python
Bruk.Liu39 分钟前
(LangChain实战5):LangChain消息模版ChatPromptTemplate
人工智能·python·langchain·agent