我正在使用C#中的VSTO,此加载项的目的是将类似于电话号码的任何内容替换为超链接,以便我们可以从API进行调用。在此过程中,我正在使用正则表达式,并使用包含超链接电话号码的自身副本替换“ body> .... body>”标签。但是,当用户尝试在使用外接程序时答复电子邮件时。包含上一封电子邮件中涉及人员信息的标题将被删除。
每次创建新答复时,都会从电子邮件顶部删除以下标头:
这是我的代码:
if (selObject is Outlook.MailItem)
{
Outlook.MailItem mailItem =
(selObject as Outlook.MailItem);
var myOSAuthResponse = MyRibbon.loginWindow.myOSAuthResponse;
//THIS IS THE IF CAUSING THE PROBLEM
if (!Regex.IsMatch(mailItem.HTMLBody, @"<a\s+(?:[^>]*?\s+)?href=([""'])(.*?)\1>(\(?[23456789]{1}\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b)<\/a>"))
{
Group regexMatch = Regex.Match(mailItem.HTMLBody, @"(<body.*?>.*?<\/body>)").Groups[1];
string body = regexMatch.Value;
string newBody = Regex.Replace(body, @"(\(?[23456789]{1}\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b)", @"<a href='oscp:" + myOSAuthResponse.TokenResponse.Access_token + "?" + myOSAuthResponse.UserExtension + "?" + myOSAuthResponse.SilTenantId + "?" + MyRibbon.loginWindow.DeviceID + "?" + "$&" + "'>$&</a>");
//HEADER IS DELETED HERE VVVVVVVVVVVVVV
mailItem.HTMLBody = Regex.Replace(mailItem.HTMLBody, body, newBody);
}
}
我在代码中添加了注释,以显示删除标题的确切行。新的顶部标头被删除,因为在进行回复时,它不再存在于HTMLBody标记中。因此,最终它会覆盖没有它的回复。如何在不删除顶部标头的情况下捕获回复消息的整个HTMLBody?