为了发送 PDF 文件作为附件,可以在代码的邮件发送部分添加附件功能。以下是更新后的代码,展示如何将 PDF 文件作为附件发送。
修改后的代码
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()
关键变化
- 附件路径:
- 在初始化时传入 PDF 文件的路径。
- 确保路径合法且文件存在,使用
os.path.exists()
进行验证。
- 添加附件:
- 使用
mail.Attachments.Add(self.pdf_path)
添加附件。 - 在发送邮件前,检查附件路径是否有效。
- 使用
注意事项
- 附件大小:Outlook 邮件附件大小有限制,确保 PDF 文件符合限制。
- 文件路径:使用绝对路径,避免路径解析问题。
- 多附件支持:如果需要添加多个附件,可以多次调用
mail.Attachments.Add()
,传入不同的文件路径。