[英]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.