Как отправить электронную почту через IIS7?

Я пытаюсь настроить SMTP-сервер на моей машине с Windows 7 в IIS7. Я установил его для "отправки электронной почты на localhost, порт 25, без проверки подлинности. Но когда я пытаюсь подключиться программно из моей программы на С#, я получаю сообщение об ошибке:

Отказ отправки почты ", внутреннее исключение" Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него 127.0.0.1:25

public static void SendEmail(MailMessage m) {
  var smtp = new SmtpClient {
    Host = "localhost",
    Port = 25,
    UseDefaultCredentials = true,
  };
  smtp.Send(m);
}

Почему? Какой еще секретный переключатель мне нужно перевернуть?

Ответы

Ответ 1

Лучший метод, который я нашел, заключался в использовании SMTP4Dev, который прослушивает электронные письма и показывает вам, что было "отправлено", Фактически отправляйте что-нибудь. Отлично подходит для тестирования!

Ответ 2

В целях разработки я использую хранение писем в файловой системе, попробуйте это в web.config

<mailSettings>
  <smtp deliveryMethod="SpecifiedPickupDirectory">
    <specifiedPickupDirectory pickupDirectoryLocation="c:\temp\mails\" />
  </smtp>
</mailSettings>

Ответ 3

Извините, но большинство из этих ответов были совершенно запутанными и не объясняли проблему. Вот в чем проблема.

"SMTP-E-mail" в IIS 7, как на Windows 7 Professional, так и на "реальном" веб-сервере, таком как Windows Server 2008, заключается в том, что электронная почта SMTP не является истинным "виртуальным SMTP-сервером" или тем, что Microsoft называет "простой Протокол передачи почты (SMTP)". Это просто интерфейс, который позволяет вам использовать приложения для SMTP-сервера в Интернете. Виртуальный SMTP-сервер, который мы использовали для старых Windows, теперь доступен только как надстройка на серверных операционных системах, используя "Менеджер сервера" в разделе "Администрирование" и нажав "добавить функции". Thats not found on say Windows 7 Professional. Еще одна ошибка Microsoft!

Тем не менее, вы все равно можете использовать часть "SMTP E-mail" в разделе "Разработка приложений" или даже ваш веб-сервер для маршрутизации почты на настоящий SMTP-сервер. Это не похоже на старые времена, когда оба были одинаковыми, и вы могли направлять электронную почту и обратно в свою локальную коробку и т.д. Для тестирования. Они позволяют вам хранить это локально, но это не очень помогает мне. Вот почему, когда в SMTP E-mail "localhost" не работает. Это то, что говорят большинство людей. Для этого вам потребуется установить стороннее программное обеспечение. Лучшее решение - просто получить пакет администрирования Windows Server с виртуальным сервером и всеми преимуществами веб-сервера, найденными на ОС сервера, и установить следующее: http://www.sysprobs.com/install-admin-pack-windows-7-remote-desktop-manager

Имейте в виду, что вам не нужно запускать настоящий виртуальный SMTP-сервер в локальном или на сервере, если у вас есть адрес реальной службы SMTP (например, "mail.yourwebhost.com" ), В разделе IIS7 просто нажмите на ссылку SMTP E-mail в разделе IIS7 и введите адрес. Но "localhost" не будет. Если вы используете SMTP-адрес электронной почты с удаленным хостом, я обнаружил, что большинство поставщиков SMTP или электронной почты требуют две дополнительные вещи: порт, отличный от "25", и вы добавляете собственные учетные данные аутентификации, найденные в SMTP-E-mail. Network Solutions любит использовать ваш адрес электронной почты для входа и пароля вашего адреса. Я подключил все это, а почтовый объект С# отправил почту без виртуального SMTP-сервера в моем локальном поле. Последний трюк также обязательно добавьте это в свой код С#:

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(
        "mail.yourhost.com",155);//add custom port here
//This object stores the authentication values
System.Net.NetworkCredential mycredentials = new System.Net.NetworkCredential(
        "[email protected]", "passwordhere");
client.UseDefaultCredentials = false;
client.Credentials = mycredentials;