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
.
您正在重置所有收件人。那是你真正想做的吗?尝试使用 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();
我正在编写 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
.
您正在重置所有收件人。那是你真正想做的吗?尝试使用 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();