Отправка нескольких электронных писем с использованием Outlook MailItem в цикле - PullRequest
1 голос
/ 04 декабря 2011

Здравствуйте. Я разрабатываю надстройку outlook, поскольку в рамках рабочего процесса она должна принимать тело и тему mailItem, а для каждого получателя она должна изменять тело сообщения в соответствии с электронной почтой получателя.

Проблема в том, что он просто отправляет первое электронное письмо, а после Send(); не отправляет электронное письмо другим получателям

 Outlook.Application application = Globals.ThisAddIn.Application;
        Outlook.Inspector inspector = application.ActiveInspector();
        Outlook.MailItem myMailItem = (Outlook.MailItem)inspector.CurrentItem;
        myMailItem.Save();



        if (myMailItem != null)
        {

            myMailItem.Save();
            PorceesData(myMailItem);
        }

           ..
           ..
           ..
           ..
   private void ProcessData(MailItem oMailItem)
      {

Recipients recipients = oMailItem.Recipients;

string Body = oMailItem.Body;
string To = oMailItem.To;
string CC = oMailItem.CC;
string bcc = oMailItem.BCC;

foreach (Recipient r in recipients)
{
   if (r.Resolve() == true)
    {

        string msg = "Hello open the attached file (msg.html); 
        string address = r.Address;
        oMailItem.Body = msg;
         oMailItem.To = address;
         oMailItem.Subject = "my subject"

        foreach (Attachment t in oMailItem.Attachments)
         {
              t.Delete();
            }

          oMailItem.Attachments.Add(@"mydirectory");

           oMailItem.Send();
}

1 Ответ

2 голосов
/ 06 декабря 2011

_MailItem.Send() закрывает текущий инспектор.Этого нет в документации _MailItem.Send , но это фактическая реализация Outlook.Вы, вероятно, должны придумать другой подход.Я бы предложил создать новый экземпляр MailItem для каждого сообщения, которое вы хотите отправить.

Вы можете создать новый MailItem, используя ...

Outlook.MailItem eMail = (Outlook.MailItem)
Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem);
eMail.Subject = subject;
eMail.To = toEmail;
eMail.Body = body;
eMail.Importance = Outlook.OlImportance.olImportanceLow;
((Outlook._MailItem)eMail).Send();

После отправки всемПолучатели вы можете вручную закрыть текущий инспектор, используя следующие (Send() неявно вызывает этот метод )

((Outlook._MailItem)myMailItem).Close(Outlook.OlInspectorClose.olDiscard)
...