能否使用IronPython在Outlook客户端拦截并重写邮件?

1 投票
4 回答
2952 浏览
提问于 2025-04-15 14:23

我想要拦截并把一些自动发送的邮件变得更容易阅读。我觉得用VBA可以做到,但我更想用Python来处理这些文本。我可以创建一个IronPython的客户端脚本来预处理某些邮件吗?

编辑:
我觉得可以通过Outlook的规则来实现。在Outlook 2007中,你可以这样操作:
工具 -> 规则 -> 新建规则

“当邮件到达时检查消息”

接下来

[选择要处理的邮件]

接下来

“运行一个脚本”

在“运行一个脚本”中,你可以使用VBA脚本。

4 个回答

2

这还在进行中,但在其他帖子帮助下,我已经找到了部分答案。下面是通过运行脚本来重写指定邮件的步骤。我使用的是Outlook 2007。

  1. 下载并安装 pywin32

  2. 下载并安装 ExchangeCdo.exe

  3. 把这段代码放到一个文件里,然后从 cmd 运行它:

import os, sys, re
import win32com.client
session = win32com.client.gencache.EnsureDispatch("MAPI.session")
win32com.client.gencache.EnsureDispatch("Outlook.Application")
outlook = win32com.client.Dispatch("Outlook.Application")
#print '\n'.join(dir(outlook))
mapi = outlook.GetNamespace('MAPI')
inbox =  mapi.GetDefaultFolder(win32com.client.constants.olFolderInbox)
items = inbox.Items
#items.Restrict("[Unread] = true")
#print '\n'.join(dir(items))
while True:
    item = items.GetNext()
    if item == None: break
    #print '\n'.join(dir(item))
    if re.compile(r'crazy email').search(item.Subject):
        print item.Subject
        print item.Body
        # works VVVV
        item.Body = 'whoya!'
        item.Save()
        break
2

我只能给你一些建议。很多年前,我在Outlook上使用过一个贝叶斯垃圾邮件过滤器。这个过滤器是用Python写的,它提供了一个Outlook的插件,可以过滤进来的邮件。这个软件叫做SpamBayes,这个项目现在仍然在线。因为它是开源的,你应该能找到所有必要的信息,教你怎么把邮件过滤器接入Outlook。这些信息应该能帮助你了解如何添加代码,真正改变邮件内容。我的理解是它是用普通的Python(CPython)写的,但如果你更习惯用IronPython,转换起来应该也不难。试试看吧。

2

你可以在这里查看 Outlook 对象模型的相关信息:http://msdn.microsoft.com/en-us/library/ms268893.aspx

要通过 COM 连接到 Outlook,你需要用到 pywin32 这个工具。

我知道的没有专门针对 Python 的参考资料,但你可以参考一些示例脚本,然后把它们“翻译”成 Python 代码。一开始可能会觉得有点难,但一旦你理解了这些对象及其在 Python 中的用法,就会简单多了。

看起来你想要了解的是:

如何:在收到电子邮件时执行操作

撰写回答