Отправка электронной почты в С#
Я использую .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.