Outlook VSTO — кнопка «Отслеживать ответ», «Ответить всем» и прикрепленный ответC#

Место общения программистов C#
Ответить
Anonymous
 Outlook VSTO — кнопка «Отслеживать ответ», «Ответить всем» и прикрепленный ответ

Сообщение Anonymous »

Чтобы уточнить и упростить ваше объяснение, вот перефразированная версия вашего запроса:
Я разрабатываю надстройку VSTO с использованием C# для управления подписями электронной почты в Outlook. Вот функциональность, которую я стремлюсь достичь:
Новое электронное письмо: добавьте собственную подпись.
Ответить/Ответить всем: отслеживайте электронное письмо и добавляйте подпись только при ответе или ответе. Нажата кнопка -all.
Что я пробовал
  • Используя событие SelectionChange
    Я пытался обнаружить действия «ответить/ответить всем» с помощью подключаясь к Событие SelectionChange:

Код: Выделить всё

currentExplorer.SelectionChange += CurrentExplorer_SelectionChange;

private void CurrentExplorer_SelectionChange()
{
try
{
var inlineResponse = currentExplorer.ActiveInlineResponse;
if (inlineResponse != null && inlineResponse is Outlook.MailItem mailItem)
{
string replyType = DetermineReplyType(inlineResponse);
if (!string.IsNullOrEmpty(replyType))
{
if (!string.IsNullOrEmpty(inlineResponse.Body))
{
string body = inlineResponse.Body;
AppendSignatureFromReply(body);
}
}
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Error: {ex.Message}");
}
}
Однако ActiveInlineResponse возвращает значение null, что делает этот подход неработоспособным.
  • Использование события NewInspector
    Затем я попробовал отслеживать ответы/ответы всем с помощью события NewInspector:

Код: Выделить всё

inspectors.NewInspector += Inspectors_NewInspector;

private void Inspectors_NewInspector(Outlook.Inspector inspector)
{
if (inspector.CurrentItem is Outlook.MailItem mailItem)
{
mailItem.PropertyChange += MailItem_PropertyChange;
if (inspector.EditorType == Outlook.OlEditorType.olEditorWord)
{
if (mailItem.ReplyRecipients != null && mailItem.Recipients.Count > 0)
{
MessageBox.Show("Triggered");
string url = AppendSignatureFromReply(mailItem.Body);
if (!string.IsNullOrEmpty(url))
{
var signature = Input.DownloadBlobContentByURL(url);
signature = UpdateSignatureInformation(signature);
//mailItem.HTMLBody = $"

{signature}" + mailItem.HTMLBody;
}
}
}
}
}
Этот метод обнаруживает открытие существующего электронного письма, но ошибочно запускает добавление подписи даже до нажатия кнопки «Ответить/ответить всем». Мне нужно определить, когда происходит действие «Ответить/ответить всем», и добавить подпись в этот момент.
Запрос о помощи
Как я могу надежно отслеживать действие «Ответить/ответить всем» событий и добавлять подпись только после того, как пользователь нажмет кнопку «Ответить/ответить всем»?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ched-reply
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»