簡體   English   中英

Outlook VSTO加載項:無法解析收件人名稱

[英]Outlook VSTO Add-In: Can not resolve recipientname

我正在編程一個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;
    }

您需要通過將cancel參數設置為true來取消操作,並使用新的電子郵件地址安排重新發送操作。 在主線程上觸發Tick事件的計時器可以幫助完成該任務。

您也可以考慮制作電子郵件副本,更改收件人(對副本進行任何更改)並提交。 在這種情況下,您將不得不區分此類消息,並在ItemSend事件處理程序中跳過它們。 UserProperties正常工作,您可以使用UserProperties

您正在重置所有“收件人”。 那是您真正想要做的嗎? 嘗試使用MailItem.Recipients.Add (使Recipient對象重新調諧),然后再使用Recipient.Resolve

您還將設置純文本的Body屬性,以清除所有格式。 考慮改用HTMLBody ,只需記住兩個HTML字符串必須合並而不是串聯以生成有效的HTML。

得到它的工作:

                    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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM