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

Я использую.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;

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

10
задан Paul Michaels 28 May 2010 в 11:41
поделиться

11 ответов

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

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

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

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

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

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

9
ответ дан 3 December 2019 в 14:00
поделиться

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

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

3
ответ дан 3 December 2019 в 14:00
поделиться

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

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

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

5
ответ дан 3 December 2019 в 14:00
поделиться

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

2
ответ дан 3 December 2019 в 14:00
поделиться

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

Проверьте MailItem и MailMessage .

2
ответ дан 3 December 2019 в 14:00
поделиться

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

1
ответ дан 3 December 2019 в 14:00
поделиться

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

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

1
ответ дан 3 December 2019 в 14:00
поделиться

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

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

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

1
ответ дан 3 December 2019 в 14:00
поделиться

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

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

1
ответ дан 3 December 2019 в 14:00
поделиться

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

10
ответ дан 3 December 2019 в 14:00
поделиться

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

3
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: