You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python实现Outlook多邮件Titus分类自动选择的方案咨询

Python自动化设置新版Titus邮件分类实现方法

旧代码失效的核心原因是2020及之后版本的Titus for Outlook插件,不再读取UserProperties下的outlook.comClassification字段触发分类校验,直接写入该自定义字段不会被插件识别,发送时会被拦截或者弹出分类缺失提示。
下面是两种可落地的实现方案,支持批量邮件发送场景:

方案1:直接写入MAPI属性(稳定性最高,无界面干扰)

新版Titus将分类标识存储在邮件底层MAPI命名属性中,通过Outlook的PropertyAccessor接口直接写入对应属性即可被插件识别,全程不需要弹出邮件窗口,适合批量发信场景。

注意:不同企业部署Titus时可能自定义分类枚举值和属性命名,如果默认参数不生效,可以手动给一封草稿邮件打上目标分类,用MFCMAPI工具查看该草稿的字符串命名属性,找到Titus相关的属性名和存储值替换即可。

可直接运行的参考代码:

import win32com.client
import time

# 基础常量
olMailItem = 0x0
# 默认部署环境下Titus分类的MAPI属性地址
TITUS_CLASS_PROP = "http://schemas.microsoft.com/mapi/string/{893E83A7-2EDC-4F8F-B14C-D18B0763D02A}/TitusClassification"
# 替换为你需要设置的分类值,常见枚举:Public/Internal/Confidential/Restricted
TARGET_CLASS = "Internal"

def send_titus_classified_mail(recipient, subject, body):
    outlook_app = win32com.client.Dispatch("Outlook.Application")
    mail = outlook_app.CreateItem(olMailItem)
    mail.To = recipient
    mail.Subject = subject
    mail.Body = body

    # 写入分类属性
    prop_accessor = mail.PropertyAccessor
    prop_accessor.SetProperty(TITUS_CLASS_PROP, TARGET_CLASS)
    # 保存邮件触发Titus插件校验分类标记,避免发送拦截
    mail.Save()
    mail.Send()

# 批量发信示例
if __name__ == "__main__":
    mail_task_list = [
        ("user01@company.com", "月度工作汇报", "请查收本月工作汇报内容"),
        ("user02@company.com", "项目进度同步", "本周项目进度同步如下:")
    ]
    for to, sub, content in mail_task_list:
        send_titus_classified_mail(to, sub, content)
        # 加间隔避免触发频率限制
        time.sleep(1)

方案2:UI自动化兜底(适配高度定制化部署场景)

如果你们公司的Titus插件做过二次开发,MAPI属性写入逻辑不生效,可以用pywinauto做界面操作兜底:创建邮件后先调用Display()呼出窗口,自动定位Titus分类控件选择目标分类、点击确认后再发送。
核心参考逻辑:

import win32com.client
from pywinauto import Application
import time

olMailItem = 0x0
outlook_app = win32com.client.Dispatch("Outlook.Application")
mail = outlook_app.CreateItem(olMailItem)
# 填充邮件内容逻辑和上述方案一致
mail.To = "user@company.com"
mail.Subject = "测试邮件"
mail.Body = "测试正文"

# 呼出邮件窗口
mail.Display()
time.sleep(1.5)
# 连接邮件窗口,backend选uia兼容新版Outlook和Titus插件
app = Application(backend="uia").connect(title_re=".* - 邮件", timeout=10)
mail_win = app.top_window()
# 定位Titus分类下拉框选择对应分类,控件名称需要根据你本地实际插件界面调整
class_combo = mail_win.descendants(title="信息分类", control_type="ComboBox")[0]
class_combo.select("Internal")
# 点击分类确认按钮
mail_win.descendants(title="确定", control_type="Button")[0].click()
time.sleep(0.5)
mail.Send()

注意事项

  • 用UI自动化方案时,脚本运行过程中不要手动操作鼠标键盘、不要切换窗口焦点,否则会导致控件定位失败。
  • 批量发信时建议单封邮件发送间隔设置为1~2秒,避免触发Titus反自动化拦截或者邮件服务器的发信频率限制。

内容的提问来源于stack exchange,提问作者sloth143chunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:54:37