如何使用 VSTO Outlook 以编程方式向电子邮件添加信息?

问题描述 投票:0回答:3

我们目前正在开发一个与最终用户进行视觉交互以提供一些信息的插件,我们想使用邮件提示,但从我们所看到的情况来看显然这是不可能的

然而,是否有可能有类似的东西或模仿这种技巧(第二个 sshot 是理想的)..

选项一: https://i.stack.imgur.com/vcQYb.png

选项2: https://i.stack.imgur.com/7k19w.png

我们还查看并形成了区域,但这将是最后一个选项,理想的是在第二个屏幕截图中使用工具提示来显示一条小消息以帮助用户(任何线索都值得赞赏)。

我们也在寻找一种功能来禁用正文中的链接(就像垃圾过滤器所做的那样),但也没有机会通过文档(可能是内部程序)找到它

到处寻找记录的元素......

c# outlook vsto outlook-addin office-addins
3个回答
0
投票

在屏幕截图上,您看到了标准的 Outlook 通知和 MailTips - 这是 Exchange 的功能,而不是 Outlook。

我们还查看并形成了区域,但这将是最后一个选项,理想的是在第二个屏幕截图中使用工具提示来显示一条小消息以帮助用户(任何线索都值得赞赏)。

Outlook 对象模型没有为此提供任何东西,没有内置的属性或方法。唯一可能的选择是使用一个表单区域,您可以在其中将自定义 UI 放在 Outlook 中标准表单/窗口的底部。可用于 Outlook 窗体区域的

Adjoining
布局将窗体区域附加到 Outlook 窗体默认页面的底部。因此,如果您想将表单放在顶部,您需要使用 Windows API 函数来子类化 Outlook 窗口或考虑使用 Advanced Outlook 视图和表单区域,其中提供开箱即用的顶部布局。

您还可以考虑为 Outlook 开发一个 Web 插件,您可以从插件中以编程方式设置

notification
项目,请参阅 Office.NotificationMessages 接口 了解更多信息。例如:

// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml
const id = $("#notificationId").val();
const details =
  {
    type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage,
    message: "Non-persistent informational notification message with id = " + id,
    icon: "icon1",
    persistent: false
  };
Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult);

请参阅构建您的第一个 Outlook 加载项以快速开始。

我们也在寻找一种功能来禁用正文中的链接(就像垃圾过滤器所做的那样),但也没有机会通过文档(可能是内部程序)找到它

您需要自行处理消息体。 Outlook 对象模型不提供开箱即用的任何属性或方法。

Outlook对象模型支持三种自定义邮件正文的主要方式:

  1. Body 属性返回或设置表示 Outlook 项目的明文正文的字符串。
  2. MailItem 类的
    HTMLBody
    属性返回或设置表示指定项的 HTML 正文的字符串。设置
    HTMLBody
    属性将始终立即更新
    Body
    属性。
  3. Word对象模型可用于处理消息体。有关详细信息,请参阅第 17 章:使用项目实体

0
投票

您可以添加一个特殊的 MAPI 属性(Web 插件使用,DASL 名称

"http://schemas.microsoft.com/mapi/string/{A98A1EF9-FF40-470B-A0D7-4D7DCE6A6462}/WebExtNotifications"
)来显示通知横幅。

以下内容(VBA,您需要取消选择并再次选择当前选定的消息才能看到更改):

    notificationXml = "<?xml version=""1.0""?>" & vbCrLf & _
    "<Apps>"& vbCrLf & _
    "  <App id=""00000000-0000-0000-0000-000000000000"">"& vbCrLf & _
    "    <Notifications>"& vbCrLf & _
    "      <Notification key=""notification"">"& vbCrLf & _
    "        <type>0</type>"& vbCrLf & _
    "        <message>Test notification&#13;with two lines</message>"& vbCrLf & _
    "      </Notification>"& vbCrLf & _
    "    </Notifications>"& vbCrLf & _
    "  </App>"& vbCrLf & _
    "  <App id=""00000000-0000-0000-0000-000000000001"">"& vbCrLf & _
    "    <Notifications>"& vbCrLf & _
    "      <Notification key=""notification"">"& vbCrLf & _
    "        <type>0</type>"& vbCrLf & _
    "        <message>Another notification</message>"& vbCrLf & _
    "      </Notification>"& vbCrLf & _
    "    </Notifications>"& vbCrLf & _
    "  </App>"& vbCrLf & _
    "</Apps>"
    
    set msg = Application.ActiveExplorer.Selection(1)
    msg.PropertyAccessor.SetProperty "http://schemas.microsoft.com/mapi/string/{A98A1EF9-FF40-470B-A0D7-4D7DCE6A6462}/WebExtNotifications", notificationXml
    msg.Save


-1
投票

@Dmitry 的特殊 MAPI 属性是一个很好的方向。有没有办法添加到该 xml 的链接?

© www.soinside.com 2019 - 2024. All rights reserved.