outlook - 我可以将自定义图标添加到“outlook”项目吗?
问题描述
我正在尝试使用 Outlook 的 officejs 插件将自定义图标添加到Outlook项目(收件箱项目列表)。
如果 officejs 无法做到这一点,那么我如何使用 Exchange 服务或任何其他工具或库来实现这一点?
解决方案
您可以更改图标,但是,您可以选择图标。您将需要使用 C# 或 VB.NET(例如 VSTO Outlook-addin)或 VBA。
我找不到您可以使用的图标值列表,但这是旧列表的图像 - 以防链接丢失。
要更改图标,您需要使用MailItem.PropertyAccessor
几个示例 Const(这些是十六进制值,但您也可以使用 Long)
Const OL_PHONE = &H15D
Const OL_GROUP = &H202
Const OL_NOTE = &H1BD
Const PR_ICON_INDEX As String = "http://schemas.microsoft.com/mapi/proptag/0x10800003"
使用以下辅助方法
'use the Get to see the value of an icon
'prior to this code you would need to get a reference to an Outlook mailitem
Dim res As New Object
GetExtendedPropertyValue(oMailItem, PR_ICON_INDEX, res)
'check the value of res or call Hex(res) to see its hex value
'here you can set the icon eg OL_GROUP etc
SetExtendedPropertyValue(oMailItem, PR_ICON_INDEX, OL_PHONE)
我做了几个辅助方法
Private Function GetExtendedPropertyValue(ByVal aMailItem As Outlook.MailItem, ByVal aProperty As String, ByRef res As Object) As Boolean
Dim oPropAcc As Outlook.PropertyAccessor = Nothing
Try
oPropAcc = DirectCast(aMailItem.PropertyAccessor, Outlook.PropertyAccessor)
res = oPropAcc.GetProperty(aProperty)
Return True
Catch ex As System.Exception
'Put your own logging here
Finally
If Not oPropAcc Is Nothing Then
Marshal.ReleaseComObject(oPropAcc)
oPropAcc = Nothing
End If
End Try
Return False
End Function
Private Function SetExtendedPropertyValue(ByVal aMailItem As Outlook.MailItem, ByVal aProperty As String, ByVal value As Integer) As Boolean
Dim oPropAcc As Outlook.PropertyAccessor = Nothing
Try
oPropAcc = DirectCast(aMailItem.PropertyAccessor, Outlook.PropertyAccessor)
oPropAcc.SetProperty(aProperty, value)
Return True
Catch ex As System.Exception
'Put your own logging here
Finally
If Not oPropAcc Is Nothing Then
Marshal.ReleaseComObject(oPropAcc)
oPropAcc = Nothing
End If
End Try
Return False
End Function
这三个例子看起来像这样
PR_ICON_INDEX PidTagIconIndex 规范属性可以在这里找到并注意他们确实说
此属性(如果存在)是对客户端的提示。客户端可能会忽略此属性的值。
然而,情况似乎并非如此。
当然,图标更改不会是永久性的。如果用户转发电子邮件或回复,那么它将被更改。
编辑 顺便说一句,这里是找出可能的图标的好方法。创建一个临时文件夹并将垃圾邮件复制到此文件夹 2048 次。然后运行这段代码
Public Sub PrIconIndex()
USE THIS MACRO WITH CARE!
Dim objItems As Items
Dim mail As MailItem
Dim i As Integer
Set objItems = Application.ActiveExplorer.CurrentFolder.Items
For i = 1 To 2048
Set mail = objItems(i)
Call mail.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x10800003", i)
mail.Body = CStr(i)
mail.Save
Next
End Sub
以上来自这个论坛链接
推荐阅读
- angular - Angular 是否以相同的方式处理插值和一种方式绑定?
- c - 即使在增加地址之后指针的值如何相同,对于变量它的不同
- html - 如何在 ionic 3 中获取表单值
- python - 如何验证 django 自定义模型字段属性?
- javascript - 为什么要避免使用事件循环来执行 CPU 密集型任务?
- python - 向消息添加反应。Discord.py 重写
- php - 如何使用 Wordpress 插件“代码片段”创建 Woocommerce 自定义货币符号
- python - 无法从 http 请求获取 json 响应
- ios - Xamarin iOS 应用程序在 AppStoreConnect 中被拒绝,说“卖家和公司名称不反映应用程序名称”
- android - Recyclerview OnScroll down,布局隐藏,在按钮单击时打开