web-dev-qa-db-fra.com

Comment puis-je authentifier SMTP en C #

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 celui qui a envoyé le message. 

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

67
ecleel
using System.Net;
using System.Net.Mail;

using(SmtpClient smtpClient = new SmtpClient())
{
    var basicCredential = new NetworkCredential("username", "password"); 
    using(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.

140
Arief

Assurez-vous de définir SmtpClient.Credentials after appelez SmtpClient.UseDefaultCredentials = false

L'ordre est important car le réglage de SmtpClient.UseDefaultCredentials = false réinitialisera SmtpClient.Credentials en null.

78
Joe King

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

6
OJ.

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);
2
Jason Dang

Comment envoyez-vous le message?

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

1
Tor Haugen

Dans mon cas, même après avoir suivi tout ce qui précède. J'ai dû mettre à niveau mon projet de .net 3.5 à .net 4 pour autoriser notre serveur de messagerie Exchange 2010 interne.

0
YoniXw