在运行时更改Outlook中的收件箱图标

时间:2015-07-17 13:50:38

标签: c# outlook vsto add-in

我的Outlook Addin有问题。我的AddIn处理传入的邮件并验证不同的标题等。我想检查是否设置了特定的标题,然后在我的收件箱文件夹中更改此邮件的图标。这可能吗?

2 个答案:

答案 0 :(得分:1)

你可以

  1. 通过修改PR_ICON_INDEX MAPI属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x10800003)将图标更改为Outlook本身使用的几十个预定义图标(例如,当它显示消息被回复/转发时)使用MailItem.PropertyAccessor.SetProperty。您可以在OutlookSpy中使用该属性及其不同的值进行播放 - 选择带有已回复/转发图标的邮件,单击IMessage按钮,双击PR_ICON_INDEX MAPI属性进行修改。

  2. 安装您自己的自定义表单。您可以指定表单处理的邮件类和自定义图标。如果更改邮件的邮件类,Outlook将显示您的自定义图标。

答案 1 :(得分:0)

不,自定义图标只能与自定义表单一起使用。因此,您需要发布自定义表单以更改图标。

但您可以自由处理收到的电子邮件。例如,您可以处理在收件箱中收到新项目时触发的Application类的NewMailEx事件。

此事件会针对Microsoft Outlook处理的每个已接收项触发一次。该项可以是几种不同项类型之一,例如,MailItem,MeetingItem或SharingItem。 EntryIDsCollection字符串包含与该项对应的条目ID。请注意,当EntryIDCollection包含自上次触发事件以来收件箱中收到的所有项目的逗号分隔条目ID列表时,此行为已从事件的早期版本更改。

当新邮件到达收件箱时以及客户端规则处理发生之前,将触发NewMailEx事件。您可以使用EntryIDCollection数组中返回的条目ID来调用NameSpace.GetItemFromID方法并处理该项。请谨慎使用此方法,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。

您可以使用PropertyAccessor.GetProperty方法获取PR_TRANSPORT_MESSAGE_HEADERS属性值:

 Sub DemoPropertyAccessorGetProperty() 
  Dim PropName, Header As String 
  Dim oMail As Object 
  Dim oPA As Outlook.PropertyAccessor 
  'Get first item in the inbox 
  Set oMail = _ 
  Application.Session.GetDefaultFolder(olFolderInbox).Items(1) 
  'PR_TRANSPORT_MESSAGE_HEADERS 
  PropName = "http://schemas.microsoft.com/mapi/proptag/0x007D001E" 
  'Obtain an instance of PropertyAccessor class 
  Set oPA = oMail.PropertyAccessor 
  'Call GetProperty 
  Header = oPA.GetProperty(PropName) 
  Debug.Print (Header) 
 End Sub