2010-05-04 5 views
122

Je vois différentes versions du constructeur, l'une utilise les informations de web.config, l'autre spécifie l'hôte, et l'autre l'hôte et le port. Mais comment définir le nom d'utilisateur et le mot de passe pour quelque chose de différent de web.config? Nous avons le problème où notre smtp interne est bloqué par certains clients de haute sécurité et nous voulons utiliser leur serveur smtp, y a-t-il un moyen de le faire à partir du code au lieu de web.config?Comment définir un nom d'utilisateur et un mot de passe pour l'objet SmtpClient dans .NET?

Dans ce cas, comment utiliser les informations d'identification web.config si aucune n'est disponible dans la base de données, par exemple?

public static void CreateTestMessage1(string server, int port) 
{ 
    string to = "[email protected]"; 
    string from = "[email protected]"; 
    string subject = "Using the new SMTP client."; 
    string body = @"Using this new feature, you can send an e-mail message from an application very easily."; 
    MailMessage message = new MailMessage(from, to, subject, body); 
    SmtpClient client = new SmtpClient(server, port); 
    // Credentials are necessary if the server requires the client 
    // to authenticate before it will send e-mail on the client's behalf. 
    client.Credentials = CredentialCache.DefaultNetworkCredentials; 

    try { 
     client.Send(message); 
    } 
    catch (Exception ex) { 
     Console.WriteLine("Exception caught in CreateTestMessage1(): {0}", 
        ex.ToString()); 
    }    
} 

Répondre

243

Le SmtpClient peut être utilisé par le code:

SmtpClient mailer = new SmtpClient(); 
mailer.Host = "mail.youroutgoingsmtpserver.com"; 
mailer.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword"); 
+0

si je ne mets pas un seul sera-il utiliser ceux de web.config par défaut? – BigOmega

+0

Non, ce sera le DefaultNetworkCredentials si fourni ou rien. – pipelinecache

+2

@pipelinecache Ryan a raison, si aucune information d'identification n'est fournie, il regardera dans web.config – Tomas

23

Utilisez NetworkCredential

Eh oui, il suffit d'ajouter à votre code ces deux lignes.

System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("username", "password"); 

client.Credentials = credentials; 
2
SmtpClient MyMail = new SmtpClient(); 
      MailMessage MyMsg = new MailMessage(); 
      MyMail.Host = "mail.eraygan.com"; 
      MyMsg.Priority = MailPriority.High; 
      MyMsg.To.Add(new MailAddress(Mail)); 
      MyMsg.Subject = Subject; 
      MyMsg.SubjectEncoding = Encoding.UTF8; 
      MyMsg.IsBodyHtml = true; 
      MyMsg.From = new MailAddress("username", "displayname"); 
      MyMsg.BodyEncoding = Encoding.UTF8; 
      MyMsg.Body = Body; 
      MyMail.UseDefaultCredentials = false; 
      NetworkCredential MyCredentials = new NetworkCredential("username", "password"); 
      MyMail.Credentials = MyCredentials; 
      MyMail.Send(MyMsg); 
+4

vous devriez essayer d'afficher seulement le code relavent à la réponse –

0

Depuis pas tous mes clients utilisent les comptes SMTP authentifiés, j'ai eu recours à l'aide du compte SMTP que si application des valeurs clés sont fournies dans le fichier web.config.

Voici le code VB:

sSMTPUser = ConfigurationManager.AppSettings("SMTPUser") 
sSMTPPassword = ConfigurationManager.AppSettings("SMTPPassword") 

If sSMTPUser.Trim.Length > 0 AndAlso sSMTPPassword.Trim.Length > 0 Then 
    NetClient.Credentials = New System.Net.NetworkCredential(sSMTPUser, sSMTPPassword) 

    sUsingCredentialMesg = "(Using Authenticated Account) " 'used for logging purposes 
End If 

NetClient.Send(Message)