以下是一个使用 Python 和 win32com.client
模块实现的示例代码,每当 Outlook 接收到一封新邮件时,执行检查逻辑并发送一封邮件到指定邮箱。这个代码依赖于 Windows 系统和安装了 Microsoft Outlook。
环境准备
-
确保安装了
pywin32
库:bashpip install pywin32
-
启用 Outlook 的脚本运行权限。
实现代码
python
import win32com.client
import pythoncom
class OutlookEventHandler:
def __init__(self, specified_email):
self.specified_email = specified_email
self.outlook = win32com.client.DispatchWithEvents(
"Outlook.Application", EventSink
)
EventSink.specified_email = specified_email
EventSink.outlook = self.outlook
class EventSink:
specified_email = 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.
"""
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.
"""
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}"
mail.Send()
print(f"Notification sent to {self.specified_email}.")
if __name__ == "__main__":
SPECIFIED_EMAIL = "example@domain.com"
print(f"Listening for new emails. Notifications will be sent to {SPECIFIED_EMAIL}.")
event_handler = OutlookEventHandler(SPECIFIED_EMAIL)
# Keep the script running to listen for new emails
pythoncom.PumpMessages()
代码说明
- 事件监听 :利用
win32com.client.DispatchWithEvents
监听 Outlook 的新邮件事件。 - 检查逻辑:示例中检查邮件主题是否包含 "urgent"。
- 发送邮件:通过 Outlook 创建并发送新邮件到指定邮箱。
- 保持运行 :
pythoncom.PumpMessages()
保持脚本运行以监听事件。
注意事项
- 权限问题:第一次运行时,Outlook 可能会提示授予访问权限。
- 后台运行:可以将脚本设置为服务或放入任务计划程序中运行。
- 防止滥用:避免频繁发送邮件,确保检查逻辑的有效性。