web-dev-qa-db-fra.com

"L'hôte SMTP n'a pas été spécifié." - mais c'est précisé?

Je suis un peu dérouté ici - je reçois l'erreur suivante:

L'hôte SMTP n'a pas été spécifié.

Même si mon code semble être correct (d'après ce que je peux voir).

Je peux le faire manuellement en incluant tous les détails à l'intérieur du contrôleur, par exemple.

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com");
smtpClient.Port = 587;
... etc

Mais je ne devrais pas avoir à faire cela, car je veux utiliser les détails à l'intérieur de mailSettings (le rendant réutilisable pour différents contrôleurs différents).

mailSettings dans mon Web.Config fichier:

<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>

Action Mon contrôleur:

 [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");
 }

Y a-t-il quelque chose qui me manque qui pourrait être à l'origine de cela? Je n'ai pas dérangé avec d'autres paramètres dans Web.Config, ils sont tels quels lors de la configuration d'un nouveau projet MVC5.

23
user2381114

Dans un projet MVC propre, je ne peux pas répliquer votre problème. Après le article de blog ScottGu ici , j'ai pu obtenir un e-mail envoyé par Gmail sans problème (VS 2013, .NET 4.5.1, MVC 5). Notez que l'élément <system.net> Est un élément de niveau supérieur et n'est pas imbriqué à l'intérieur de AppSettings ou <system.web>.

Important

Il y a quelques fichiers web.config dans votre solution, assurez-vous que mailSettings est inséré dans le niveau racine web.config (et non celui situé dans le dossier Views)

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>

Contrôleur

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);

Il n'est pas clair si certains des attributs supplémentaires que vous avez inclus causent des problèmes (pensés qu'ils ne devraient pas) tels que la méthode de livraison. Existe-t-il également un paramètre pour autoriser l'accès SMTP ou est-ce uniquement pour la livraison IMAP/POP?

Si vous pouvez tester et réussir dans un projet propre, cela indiquerait soit un problème de transformation web.config, soit un ou plusieurs autres paramètres de votre projet remplaçant les paramètres web.config que vous avez en place.

26
Tommy

La solution a été mentionnée dans le Chat , mais n'a jamais été modifiée dans la réponse ci-dessus.

Assurez-vous de définir ces paramètres dans le web.config du niveau racine et non dans le dossier Vues.

@Tommy: ... cela ressemble au web.config de votre dossier Views et non au web.config à la racine de l'application

5
Malachi