Я работаю с VSTO в C #, и цель этой надстройки - заменить все, что напоминает телефонный номер, на гиперссылку, чтобы мы могли совершать звонки из нашего API. В процессе я использую регулярное выражение и заменяю тег «body> .... body>» своей копией, которая содержит гиперссылки на номера телефонов. Однако, когда пользователи пытаются ответить на электронное письмо, используя надстройку. Заголовок, содержащий информацию о людях, участвовавших в последнем письме, удален.
Следующий заголовок удаляется из верхней части письма каждый раз, когда создается новый ответ:
![enter image description here](https://i.stack.imgur.com/GdDbl.png)
Это мой код:
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 ответного сообщения, не удаляя верхний заголовок?