Outlook AppointmentItem- как добавить некоторые данные в тело письма RTF при нажатии кнопки "отправить"

Я разрабатываю надстройку Outlook для использования VSTO с C#.

Шаг 1: Я создаю ленту для изучения встречи, при нажатии кнопки ленты читаем .rtf файл и вставить .rtf файл в тело назначения.

 try
 {
 Outlook.Inspector insp = Globals.ThisAddIn.Application.ActiveInspector();
 Outlook.AppointmentItem meetingItem = insp.CurrentItem() as Outlook.AppointmentItem;
  if(meetingItem == null){
      MessageBox.Show("the meeting is null,create a meeting Item");
      meetingItem = (Outlook.AppointmentItem)insp.Application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem);                   
    }
   if(meetingItem != null) {
    meetingItem.MeetingStatus = Outlook.OlMeetingStatus.olMeeting;
    object missing = System.Reflection.Missing.Value;
    Word.Application wordAppl;
    Word.Document wordDoc;
    Word.Selection wordSel = null;
    wordDoc = (Word.Document)insp.WordEditor;
    wordAppl = wordDoc.Parent as Word.Application;
    wordDoc.Activate();
   String path = "D://WordSendTest//template//en_US.rtf";
     String fileName = path.ToString();
     wordSel = (Word.Selection)wordAppl.Selection;
     wordSel.Range.Delete(ref missing, ref missing);
    object falseRef = false;
    wordSel.Range.InsertFile(fileName, ref missing, ref falseRef, ref falseRef, ref falseRef);
    }
   }
    catch (Exception ex)
     {
       MessageBox.Show("Robbin click error!"+ ex.ToString());
     }

Шаг 2: когда пользователь нажимает кнопку "Отправить", захватывает событие ItemSend.

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);         
        }

Шаг 3: вставьте некоторый "текст строки" в конец тела письма.

  void Application_ItemSend(object Item, ref bool Cancel)
        {
            Outlook.Inspector insp = Globals.ThisAddIn.Application.ActiveInspector();
            Outlook.AppointmentItem meeting = insp.CurrentItem as Outlook.AppointmentItem;
            Word.Document wordDoc = insp.WordEditor as Word.Document;
            Word.Application wordApp = wordDoc.Parent as Word.Application;
            Word.Selection wordSel =(Word.Selection) wordApp.Selection;
            object missing = System.Reflection.Missing.Value;
            object units = Microsoft.Office.Interop.Word.WdUnits.wdStory;
            object findEnd = (object)"~-----~~-----~-----~-----~-----~-----~\r";
            object wholeWord = true;
            wordSel.HomeKey(ref units, ref missing);
            if(wordSel.Find.Execute(ref findEnd,ref missing,ref wholeWord,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing))
            {
            wordSel.MoveUp(ref missing,ref missing,ref missing);
            wordSel.TypeText("--=Head for Insert info =--\n");
            wordSel.TypeText("when user click the <send button>,the Tex info will be insert and show here \n");
            wordSel.TypeText("--=End for Insert info=--\n");
            }
            else {
               MessageBox.Show("not fonud the END tag");
            }
        }

Проблема: в отладочной модели добавить текст успешно вставляется в тело при нажатии кнопки отправки. но фактически отправленное письмо не изменяется, только до того, как нажата "кнопка отправки". когда я открываю встречу в календаре, тело в порядке, текст успешно вставляется в конец письма.

Итак, кто знает почему, почему письмо не отправляется с телом обновления, но тело письма об обновлении сохраняется в календаре.

1 ответ

Какой ваш код, который изменяет текст? Когда это выполняется? Имейте в виду, что встречи никогда не отправляются. Когда вы нажимаете кнопку "Отправить", Outlook создает объект MeetingRequest и отправляет его. Единственный раз, когда вы можете изменить этот объект, это когда вы обрабатываете событие Application.ItemSend.

Другие вопросы по тегам