2015-03-25 9 views
0

Я новичок в C#, и я пытаюсь автоматизировать отправку электронной почты из Outlook через следующий код, и он отлично работает в среде разработки. Я бы хотел, чтобы он использовал пользователя по умолчанию в качестве отправителя, даже если Outlook не открыт.Автоматизация Отправка сообщения электронной почты через Microsoft Outlook

 private void EmailMessage(string recipient, string subject, string body) 
    { 
     Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application(); 
     Microsoft.Office.Interop.Outlook.MailItem email = (Outlook.MailItem)application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

     try 
     { 
      email.Subject = subject; 
      email.Body = body; 
      email.To = recipient; 
      ((Outlook._MailItem)email).Send(); 
      _emailConfirmation = true; 
     } 

     catch (System.Runtime.InteropServices.COMException ex) 
     { 
      Logging.LogError("Trip Email Failed", ExceptionHelper.GetInnerMostException(ex)); 
      _emailConfirmation = false; 
     } 

     finally 
     { 
      //release the objects used to send email after message has been sent\\ 
      if (email != null) 
       System.Runtime.InteropServices.Marshal.ReleaseComObject(email); 
      if (application != null) 
       System.Runtime.InteropServices.Marshal.ReleaseComObject(application); 
     } 
    } 

Все пользователи имеют учетную запись и установлены Outlook с действующим антивирусом. Моя забота о том, когда это произойдет вживую, это не удастся создать новый экземпляр перспективы или что-то еще, чего я просто не вижу. Считаете ли вы, что это сработает с тем, что я намереваюсь выполнить, когда он будет жить?

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

https://msdn.microsoft.com/en-us/library/office/bb622502.aspx

Я думаю, что может быть просто параноик, потому что я никогда не использовал PIA перед тем

+0

Я не уверен, что вы просите .... это сработает для вас в вашей среде разработчиков? Если нет, что происходит не так? –

+0

Какая ошибка? –

+0

В коде нет ошибки, однако я вижу много сообщений от людей, говорящих, что вы не должны создавать экземпляр outlook.application напрямую. https://msdn.microsoft.com/en-us/library/office/bb622502.aspx Я думаю, что я могу быть просто параноиком, потому что я никогда не использовал PIA до –

ответ

0

Там могут быть две основные причины, почему ваш код не:

  1. Вы получаете проблема безопасности. См. Outlook "Object Model Guard" Security Issues for Developers для получения дополнительной информации об этой проблеме и возможных способах устранения разрыва и предотвращения или устранения таких проблем. Помните, что в некоторых случаях диалоговое окно не будет отображаться для пользователя, вы просто получили исключение в коде.

  2. В выпуске Office 2010 для Click2Run не поддерживается автоматизация. См. Office 2010 Click-to-Run compatibility with add-ins для получения дополнительной информации. Также вы можете найти статью How to: Verify Whether Outlook Is a Click-to-Run Application on a Computer.

Попробуйте использовать свойство Получатели вместо поля Кому. Затем используйте методы Resolve или ResolveAll. См. How To: Fill TO,CC and BCC fields in Outlook programmatically для получения дополнительной информации.

Также я бы рекомендовал добавить в код любые механизмы регистрации. Итак, вы можете анализировать файлы журналов и понимать, что происходит под капотом. Например, рассмотрите возможность использования библиотеки log4net.

+0

Благодарим вас за ввод. Я попытаюсь использовать Получателя вместо метода To. Существует ли преимущество использования Получателя над To, кроме того, что проверка подлинности получателя является действительной учетной записью? –

Смежные вопросы