Printing 隐藏自定义ItemProperties以防打印。Interop.Outlook

Printing 隐藏自定义ItemProperties以防打印。Interop.Outlook,printing,outlook,interop,mailitem,Printing,Outlook,Interop,Mailitem,我写了一个Outlook插件,它基本上允许通过Outlook接收的电子邮件与网站链接,这样也可以在网站的通信功能中查看电子邮件。我在邮件项目的ItemProperties中存储其他详细信息,这些详细信息基本上是类似于网站中与电子邮件相关的用户id的内容 我遇到的问题是,在打印电子邮件时,我添加到邮件项目中的任何项目属性都会被打印。有人知道在打印电子邮件时如何排除自定义ItemProperties吗 以下是创建自定义ItemProperty的代码: // Try and access the re

我写了一个Outlook插件,它基本上允许通过Outlook接收的电子邮件与网站链接,这样也可以在网站的通信功能中查看电子邮件。我在邮件项目的ItemProperties中存储其他详细信息,这些详细信息基本上是类似于网站中与电子邮件相关的用户id的内容

我遇到的问题是,在打印电子邮件时,我添加到邮件项目中的任何项目属性都会被打印。有人知道在打印电子邮件时如何排除自定义ItemProperties吗

以下是创建自定义ItemProperty的代码:

// Try and access the required property.
Microsoft.Office.Interop.Outlook.ItemProperty property = mailItem.ItemProperties[name];

// Required property doesnt exist so we'll create it on the fly.
if (property == null) property = mailItem.ItemProperties.Add(name, Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText);

// Set the value.
property.Value = value;
在低级别(扩展MAPI)上,每个用户属性定义都有一个标志,用于确定其是否可打印。但是,该标志不会通过Outlook对象模型公开

您可以解析用户属性blob并手动设置该标志(记录了用户属性blob格式,如果单击IMessage按钮,您可以在中看到该格式),也可以使用及其。
Printable
属性

以下脚本(VB)将重置当前选定消息的所有用户属性的可打印属性:

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Msg = Session.GetMessageFromID(Application.ActiveExplorer.Selection(1).EntryID)
  for each prop in Msg.UserProperties
     Debug.Print prop.Name
     prop.Printable = false
  next
  Msg.Save

我正在处理Outlook扩展,以前有时我们也遇到同样的问题。 我们的一名团队成员找到了解决方案。您可以创建一些负责禁用打印的方法。您可以在下面看到我们代码的和平:

public void DisablePrint()
{
    long printablePropertyFlag = 0x4; // PDO_PRINT_SAVEAS
    string printablePropertyCode = "[DispID=107]";
    Type customPropertyType = _customProperty.GetType();

    // Get current flags.
    object rawFlags = customPropertyType.InvokeMember(printablePropertyCode , BindingFlags.GetProperty, null, _customProperty, null);
    long flags = long.Parse(rawFlags.ToString());

    // Remove printable flag.
    flags &= ~printablePropertyFlag;

    object[] newParameters = new object[] { flags };

    // Set current flags.
    customPropertyType.InvokeMember(printablePropertyCode, BindingFlags.SetProperty, null, _customProperty, newParameters);
}

确保_customProperty它是您通过以下代码创建的属性:
mailItem.ItemProperties.Add(名称,Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText)

这非常有效!救了我的爱丁不被搁置。一个星期来我一直用这个把头撞在墙上。