c# new ¿Cómo establecer el nombre de usuario y la contraseña para el objeto SmtpClient en.NET?




system.net.mail example c# (4)

Veo diferentes versiones del constructor, uno usa información de web.config, uno especifica el host y uno el host y el puerto. ¿Pero cómo configuro el nombre de usuario y la contraseña a algo diferente de web.config? Tenemos el problema de que nuestro smtp interno está bloqueado por algunos clientes de alta seguridad y queremos usar su servidor SMTP, ¿hay alguna manera de hacerlo desde el código en lugar de web.config?

En este caso, ¿cómo usaría las credenciales de web.config si no hay ninguna disponible en la base de datos, por ejemplo?

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

El SmtpClient se puede usar por código:

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

Como no todos mis clientes usan cuentas SMTP autenticadas, recurrí al uso de la cuenta SMTP solo si los valores clave de la aplicación se suministran en el archivo web.config.

Aquí está el código 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)

Use NetworkCredential

Sí, solo agrega estas dos líneas a tu código.

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

client.Credentials = credentials;

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