Отправка электронной почты в С#

Я использую .NET 3.5, и я хочу автоматически отправлять почту. В настоящее время я использую следующее:

Microsoft.Office.Interop.Outlook.MailItem mailMsg = 
    (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem(
     Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
mailMsg.To = recipient;
mailMsg.Subject = subject;
mailMsg.Body = body;
mailMsg.Send();

Однако я обнаружил несколько статей, которые, по-видимому, подразумевают, что я должен использовать следующий метод:

System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage();
mailmsg.To = recipient;
mailmsg.Subject = subject;
mailmsg.Body = body;

Может ли кто-нибудь сказать мне, какая разница между двумя пространствами имен, и почему вы, возможно, захотите использовать один над другим?

Ответ 1

Второй пример требует SMTP-сервера, для прямого подключения и использования этого SMTP-сервера для отправки электронной почты. Он имеет низкие накладные расходы, обычно будет работать.

Если вам нужно составить и отправить электронное письмо по адресу текущего пользователя, вы можете использовать Outlook.

До сих пор я видел только ответы с недостатками для перспективы. Но у него есть несколько преимуществ:

  • Вам не нужно запрашивать у пользователя какую-либо конфигурацию.
    • Outlook уже знает сервер Exchange/SMTP,
    • и адрес электронной почты пользователя
  • Отправляемая вами электронная почта будет сохранена в списке отправленных элементов пользователя. Таким образом, пользователь может видеть, что ват отправляется от его имени.
  • Будут использоваться дополнения, которые подписывают/шифруют исходящую электронную почту или добавляют стандартную декларацию компании, поэтому вы будете следовать политикам компании.
  • Может подсказать пользователю, разрешено ли отправлять электронную почту (да, это может быть преимуществом)
  • Вы можете выбрать только составление почты, представить ее пользователю. Пользователь может редактировать и выбирать для отправки или нет.

Edit: Я использую метод SMTP для отправки технических писем (например, файлов журналов и сообщений об ошибках) в наш блок поддержки, эти письма быстро и незаметно.

Метод Outlook, который я использую для отправки писем по адресу моего пользователя другим людям. Эти письма медленны, но отслеживаются и т.д.

Ответ 2

В первую очередь я предполагаю, что Outlook должен быть установлен на компьютере, чтобы были установлены сборки Office Interop. Второй - это чистый .Net framework.

Ответ 3

Первый метод использует interop, создавая экземпляр Outlook (outlookApplication) и имеющий этот экземпляр Outlook отправляет электронное письмо.

Второе используется для отправки электронной почты через обычный старый SMTP и вообще не требует Outlook.

Если у вас нет особых требований для взаимодействия, нет необходимости отправлять электронную почту с использованием Outlook (и ваш код не будет работать на любом компьютере, на котором не установлено Outlook).

Ответ 4

Сначала используется COM-взаимодействие, которое является ненужным служебным. Вторая - чистая .net со всеми ее функциями. Плюс он более гибкий.

Ответ 5

Как уже упоминалось, первый использует Outlook для отправки электронной почты. Недостатком является то, что пользователь должен установить Outlook; преимущество заключается в том, что он будет выглядеть, как отправляет его прогноз.

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

Ответ 6

Они разные. MailItem представляет элемент сообщения в Outlook. MailMessage представляет собой сообщение электронной почты, которое может быть отправлено с использованием класса SmtpClient.

Отметьте MailItem и MailMessage.

Ответ 7

Сначала используется COM Interop и в качестве основы используется Outlook. Он нуждается в настройке Outlook. Второй использует SMTP-клиент. Взаимодействие может привести вас к проблемам, связанным с Outlook, но позволит использовать некоторые интересные функции, такие как открытие почтового окна (но в целом это не стоит). Второй отправит бесшумную почту, хотя вы можете показать свое собственное окно, но при этом он не позволит гибкости Outlook Automation. Мой выбор - System.Net.Mail. *.

Ответ 8

Первый использует MS Office, который вы не хотите публиковать, в то время как System.Net.Mail доступен, когда установлен .Net framework.

Ответ 9

В первом примере используются библиотеки, установленные загрузкой Office Interop Assemblies.

Второй пример использует библиотеки, установленные по умолчанию с платформой .NET, System.Net.

В первом примере используются библиотеки Microsoft Interop. Я бы пошел с вашим вторым примером, поскольку он является частью установки .NET по умолчанию. В библиотеках Interop будет больше накладных расходов, что также не требуется.

Ответ 10

Microsoft.Office использует Microsoft Outlook для отправки электронной почты. Это требует, чтобы Outlook был установлен и (по крайней мере, в последний раз, когда я пытался отправить почту таким образом), более подверженный трудностям. (Например, он предлагает пользователю сообщить им, что программа пытается отправить почту от их имени и т.д.)

System.Net.Mail использует чистый .NET и указанный SMTP-сервер для отправки почты. Поверьте мне. Избегайте использования Office, если нет необходимости.

Ответ 11

Вам нужно использовать второй вариант в любой день. Это чистый .NET.

Если вы используете первый вариант, я думаю, что Outlook должен был быть установлен на этой машине. При развертывании у вас возникнут проблемы, если на сервере не установлен MS Office.