"Хост SMTP не указан". - но это указано?
Я немного озадачен здесь - я получаю следующую ошибку:
Хост SMTP не указан.
Хотя мой код кажется правильным (из того, что я вижу).
Я могу сделать это вручную, включив все детали внутри контроллера, например.
SmtpClient smtpClient = new SmtpClient("smtp.gmail.com");
smtpClient.Port = 587;
... etc
Но мне не нужно было это делать, поскольку я хочу использовать детали внутри mailSettings
(делая его повторно используемым для разных разных контроллеров).
mailSettings
в файле Web.Config
:
<system.net>
<mailSettings>
<smtp from="[email protected]" deliveryMethod="Network" >
<network host="smtp.gmail.com" defaultCredentials="true"
port="587" enableSsl="true" userName="[email protected]"
password="example"/>
</smtp>
</mailSettings>
</system.net>
Действие My Controller:
[HttpPost]
public ActionResult SubmitFeature(FormData formData)
{
SmtpClient smtpClient = new SmtpClient();
MailMessage mail = new MailMessage();
mail.To.Add(new MailAddress("[email protected]"));
mail.Body = "Test";
smtpClient.Send(mail);
return View("Example");
}
Есть ли что-то, что мне не хватает, что может быть причиной этого? Я не перепутал с другими настройками в Web.Config, они так же, как при создании нового проекта MVC5.
Ответы
Ответ 1
В чистом проекте MVC я не могу воспроизвести вашу проблему. После сообщения в блоге ScottGu здесь я смог получить почтовое отправленное письмо без проблем (VS 2013,.NET 4.5.1, MVC 5). Обратите внимание, что элемент <system.net>
является элементом верхнего уровня и не вложен внутри AppSettings
или <system.web>
.
Внимание!
В вашем решении есть несколько файлов web.config, убедитесь, что mailSettings
вставлен в корневой уровень web.config(а не тот, который находится в папке "Представления" )
Web.Config
<configuration>
<system.net>
<mailSettings>
<smtp from="[email protected]">
<network host="smtp.gmail.com"
port="587"
enableSsl="true"
userName="[email protected]"
password="SuperSecretPwd"
defaultCredentials="false" /> <!--This must be false on Gmail-->
</smtp>
</mailSettings>
</system.net>
</configuration>
контроллер
var smtpClient = new SmtpClient();
var msg = new MailMessage();
msg.To.Add("[email protected]");
msg.Subject = "Test";
msg.Body = "This is just a test email";
smtpClient.Send(msg);
Неясно, являются ли некоторые из дополнительных атрибутов, которые вы включили, вызывают проблемы (как думают, они не должны), такие как метод доставки. Кроме того, существует ли настройка для разрешения доступа SMTP или это только для доставки IMAP/POP?
Если вы можете протестировать и добиться успеха в чистом проекте, это будет указывать на проблему преобразования web.config или некоторые другие параметры в вашем проекте, переопределяющие настройки web.config, которые у вас есть.
Ответ 2
Решение было упомянуто в Chat, но никогда не редактировалось в ответ выше.
Убедитесь, что вы установили эти параметры в web.config
Корневого уровня, а не в папке "Представления".
@Tommy: ... это выглядит как web.config из вашей папки Views, а не web.config в корне приложения
Ответ 3
Я вас не устраиваю, но я получил эту ошибку, потому что у Субъекта было [square brackets]
.
И код был прост как это:
string subject = "[Mail for Admin]: Hello Admins";
using (var mailMessage = new MailMessage(sender, recipient) { Subject = subject, Body = body, IsBodyHtml = isHtml })
{
EmailClient.Send(mailMessage);
}