Saltar al contenido

Confundido con la propiedad SmtpClient.UseDefaultCredentials

Solución:

Entonces, ¿por qué establecería explícitamente la propiedad en falso para lanzar una excepción?

La razón de esto es porque el colocador de UseDefaultCredentials establece el Credentials propiedad en nulo si lo establece en falso, o lo establece en el CredentialCache.DefaultNetworkCredentials propiedad si se establece en verdadero. los DefaultNetworkCredentials MSDN define la propiedad como:

Las credenciales devueltas por DefaultNetworkCredentials representan las credenciales de autenticación para el contexto de seguridad actual en el que se ejecuta la aplicación. Para una aplicación del lado del cliente, estas suelen ser las credenciales de Windows (nombre de usuario, contraseña y dominio) del usuario que ejecuta la aplicación. Para las aplicaciones ASP.NET, las credenciales de red predeterminadas son las credenciales de usuario del usuario que inició sesión o el usuario que se está suplantando.

Cuando estableces UseDefaultCredentials en verdad, está usando su usuario de IIS, y supongo que su usuario de IIS no tiene las mismas credenciales de autenticación que su cuenta para cualquier servidor SMTP que esté usando. Configuración UseDefaultCredentials a falso nulo salen las credenciales que se establecen. Entonces, de cualquier manera, obtienes ese error.

Aquí hay un vistazo al setter para UseDefaultCredentials usando dotPeek:

set
{
    if (this.InCall)
    {
        throw new InvalidOperationException(
            SR.GetString("SmtpInvalidOperationDuringSend"));
    }
    this.transport.Credentials = value 
        ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials 
        : (ICredentialsByHost) null;
  }

Recibía el mismo mensaje y me estaba volviendo loco. Después de leer este hilo, me di cuenta de que el orden importaba al establecer mis credenciales. Esto funcionó:

client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(smtpSettings.Username, smtpSettings.Password);

Si bien esto generó el error que describe:

client.Credentials = new NetworkCredential(smtpSettings.Username, smtpSettings.Password);
client.UseDefaultCredentials = false;

Esto es solo una información para cualquier otra persona que tenga el mismo problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *