【问题标题】:Outlook VSTO Add-In: Can not resolve recipientnameOutlook VSTO 加载项:无法解析收件人名称
【发布时间】:2018-11-27 09:29:06
【问题描述】:

我正在编写一个 Outlook 插件。 我想在邮件发送之前对其进行修改。因此,我在发送电子邮件之前为我注册了一个活动。我可以修改它,但是当我尝试更改邮件的收件人(所以 mail.To)时,它会给我一个错误(不是在我的代码运行时,而是当 Outlook 尝试发送邮件时)。

错误说:'...无法解析接收者名称'(我已经翻译了它,所以它不是真正的错误文本,而是接近它)

这是我的代码:

void Application_ItemSend(object item, ref bool cancel)
    {
        if (item is Outlook.MailItem mail)
        {
            var to = mail.To;
            var body = mail.Body;
            var editedBody = to + "#" + body;
            mail.Body = editedBody;
            mail.To = @"<another email>";
        }
    }


private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        //Register the new event
        Globals.ThisAddIn.Application.ItemSend += Application_ItemSend;
    }

【问题讨论】:

    标签: c# outlook vsto outlook-addin add-in


    【解决方案1】:

    您正在重置所有收件人。那是你真正想做的吗?尝试使用MailItem.Recipients.Add(返回Recipient对象),然后使用Recipient.Resolve。

    您还设置了纯文本 Body 属性以清除所有格式。请考虑改用HTMLBody,但请记住,两个 HTML 字符串必须合并而不是连接才能生成有效的 HTML。

    【讨论】:

      【解决方案2】:

      您需要通过将 cancel 参数设置为 true 来取消操作,并使用新的电子邮件地址安排重新发送操作。在主线程上触发 Tick 事件的计时器可以帮助完成该任务。

      您也可以考虑制作电子邮件副本、更改收件人(对副本进行任何更改)并提交。在这种情况下,您必须区分此类消息并在 ItemSend 事件处理程序中跳过它们。要使其正常工作,您可以使用UserProperties。

      【讨论】:

      • 如果您只想添加或修改邮件收件人,则无需取消邮件提交。
      • 我不确定它在这个阶段是否可以工作。有时,您必须取消任何进一步的处理并重新提交该项目。所以,这取决于要求。
      • 修改 ItemSend 中的消息总是对我有用。我必须中止提交的唯一一次是(a)完全接管提交,(b)必须执行一些冗长的操作并且我不想阻止主 Outlook 线程或(c)我必须删除消息或关闭检查器。
      • 是的,我愿意。
      【解决方案3】:

      搞定了:

                          var to = string.Empty;
      
                          mail.Recipients.ResolveAll();
      
                          foreach (Outlook.Recipient r in mail.Recipients)
                          {
                              to += r.Address + ";";
                          }
                          if (to.Length > 0)
                              to = to.Substring(0, to.Length - 1);
      
                          mail.Body = to + "#" + mail.Body;
      
                          //Modify receiver
                          mail.To = string.Empty;
                          Outlook.Recipient recipient = mail.Recipients.Add("<email>");
                          recipient.Resolve();
      

      【讨论】:

        猜你喜欢
        • 2015-07-27
        • 1970-01-01
        • 2017-11-04
        • 2018-03-25
        • 2010-11-22
        • 2014-05-10
        • 2020-04-04
        • 2022-08-09
        • 1970-01-01
        相关资源
        最近更新 更多