2008-11-18 4 views
61

Je crée une nouvelle application Web ASP.NET qui utilise SMTP pour envoyer un message. Le problème est que le smtp n'a pas été authentifié par qui a envoyé le message.Comment authentifier SMTP en C#

Comment puis-je authentifier SMTP dans mon programme? est-ce que C# a une classe qui a un attribut pour entrer le nom d'utilisateur et le mot de passe?

Répondre

125
using System.Net; 
using System.Net.Mail; 


SmtpClient smtpClient = new SmtpClient(); 
NetworkCredential basicCredential = 
    new NetworkCredential("username", "password"); 
MailMessage message = new MailMessage(); 
MailAddress fromAddress = new MailAddress("[email protected]"); 

smtpClient.Host = "mail.mydomain.com"; 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Credentials = basicCredential; 

message.From = fromAddress; 
message.Subject = "your subject"; 
//Set IsBodyHtml to true means you can send HTML email. 
message.IsBodyHtml = true; 
message.Body = "<h1>your message body</h1>"; 
message.To.Add("[email protected]"); 

try 
{ 
    smtpClient.Send(message); 
} 
catch(Exception ex) 
{ 
    //Error, could not send the message 
    Response.Write(ex.Message); 
} 

Vous pouvez utiliser le code ci-dessus.

+0

D'où vient le nom d'utilisateur et le mot de passe? et qu'est ce que mail.mydomain.com? est-ce qu'il nom DNS? – Shyju

+5

ils sont votre adresse e-mail et mot de passe, mail.mydomain.com est votre serveur SMTP (par exemple smtp.gmail.com). – Arief

+0

Vous devez placer l'objet MailMessage dans une instruction using (ou appeler Dispose après votre travail), n'est-ce pas? – Ben

1

Comment envoyez-vous le message?

Les classes de l'espace de noms System.Net.Mail (probablement ce que vous devez utiliser) prennent en charge l'authentification, soit dans Web.config, soit en utilisant la propriété SmtpClient.Credentials.

6

Définissez la propriété Credentials avant d'envoyer le message.

63

Assurez-vous de régler SmtpClient.Credentialsaprès en appelant SmtpClient.UseDefaultCredentials = false.

La commande est importante car le réglage SmtpClient.UseDefaultCredentials = false réinitialisera SmtpClient.Credentials à null.

+8

Si je pouvais upvote ceci quelques fois de plus, je le ferais. – Joshua

+1

Omg J'ai perdu tellement de temps avant d'avoir vu cette réponse !! Merci monsieur +1! – avidenic

+2

c'est vieux, mais d'or; putain ça a aidé – MihaiC

1

Pour envoyer un message via TLS/SSL, vous devez définir Ssl de la classe SmtpClient sur true.

string to = "[email protected]"; 
string from = "[email protected]"; 
MailMessage message = new MailMessage(from, to); 
message.Subject = "Using the new SMTP client."; 
message.Body = @"Using this new feature, you can send an e-mail message from an application very easily."; 
SmtpClient client = new SmtpClient(server); 
// Credentials are necessary if the server requires the client 
// to authenticate before it will send e-mail on the client's behalf. 
client.UseDefaultCredentials = true; 
client.EnableSsl = true; 
client.Send(message); 
+0

écrire un exemple de code sur le client SSL vs SMTP pour faire une meilleure réponse –