2009-07-31 8 views
0

J'ai le code suivant, mais je reçois une exception: un hôte smtp n'est pas défini. Si je l'exécute et que je le teste sur ma machine locale à partir de Visual Studio, que dois-je faire pour pouvoir envoyer des emails à partir de ma machine. Dois-je activer un service Windows?Envoyer un e-mail avec .NET

private void SendMailToAdminToApprove(string email_, string name_) 
{ 
    MailMessage msg = new MailMessage(); 
    msg.From = new MailAddress("[email protected]", "Person's Name"); 
    msg.To.Add(new MailAddress("[email protected]", "Adam")); 
    msg.Subject = "Message Subject"; 
    msg.Body  = "Mail body content"; 
    msg.IsBodyHtml = true; 
    msg.Priority = MailPriority.High; 
    try 
    { 
     SmtpClient c = new SmtpClient(); 
     c.Send(msg); 
    } 
    catch (Exception ex) 
    { 
     Console.Write("T"); 
    } 
} 
+0

Assurez-vous de disposer de MailMessage lorsque vous avez terminé. –

Répondre

8

Vous devez définir l'hôte SMTP pour pointer vers un serveur SMTP réel. Une option consiste à exécuter le service SMTP sur votre propre machine, mais vous pouvez également pointer vers le serveur de votre FAI.

modifier

Comme pcampbell et Skeolan mentionné, la valeur réelle devrait aller dans app.config. Je ne suis pas sûr si localhost serait une exception: cela dépend si vous voulez l'option de ne pas exécuter un serveur local.

7

Vous devez spécifier l'hôte SMTP ici:

string smtpHost = "localhost"; 
//or go to your config file 
smtpHost = ConfigurationManager.AppSettings["MySmtpHost"].ToString(); 

SmtpClient c = new SmtpClient(smtpHost); 
+4

mieux, sortez la chaîne stmpHost réelle dans un app.config ou web.config de sorte que vous pouvez le modifier pour différents déploiements. Ensuite, vous pouvez utiliser "localhost" pour le développement (en supposant que vous exécutez un service smtp [virtuel?] Sur votre machine locale), mais avoir la possibilité de spécifier ultérieurement un serveur de messagerie externe sans avoir besoin de recompiler. – Skeolan

+1

Mettez-le définitivement dans l'app.config. Cependant, il n'est pas nécessaire de prétendre que c'est une chaîne de connexion. Faites-en un paramètre ou utilisez l'API traditionnelle. –

1

Vous devez définir le relais SMTP:

SmtpClient c = new SmtpClient("relay.yourdomain.com"); 

ou si vous utilisez le relais local:

SmtpClient c = new SmtpClient("localhost"); 
1

Vous devriez changer cette section:

SmtpClient c = new SmtpClient(); 
// Either specify a SMTP server above, or set c.Host 
c.Send(msg); 

Vous devez spécifier quel serveur SMTP va être utilisé pour envoyer ce message. Si vous installez un serveur SMTP localement, cela peut être localhost - mais dans le cas contraire, vous devrez configurer un serveur de messagerie sortant correctement.

0

Voici le code que j'utilise pour envoyer des courriels avec C#. J'ai également commenté le code pour l'envoyer localement à un fichier si vous en avez besoin.

 SmtpClient smtp = new SmtpClient(smtpServer, portNumber); 
     // Disable SSL when saving to directory. 
     smtp.EnableSsl = true; 
     smtp.Credentials = new NetworkCredential(mailFrom, password); 

     // Set mail to be delivered to a folder 
     //smtp.PickupDirectoryLocation = @"C:\mail\Send"; 
     //smtp.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
Questions connexes