Pourquoi SmtpClient.UseDefaultCredentials est ignoré?
Je suis en train d'envoyer des e-mails par l'intermédiaire d'un domaine de serveur SMTP qui utilise l'Authentification Windows Intégrée. Lorsqu'il est explicitement spécifier les informations d'identification, tout fonctionne bien:
using (var client = new SmtpClient("<Server>"))
{
client.Credentials = new NetworkCredential("<User name>", "<Password>");
client.EnableSsl = true;
client.Send(...);
}
Serveur SMTP dans les journaux d'EHLO, STARTTLS, STARTTLS et EHLO, puis AUTH, MAIL, etc.
Lorsque, d'autre part, les informations d'identification par défaut sont utilisés:
using (var client = new SmtpClient("<Server>"))
{
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Send(...);
}
- la
SmtpException
est levée, avec un message “Échec de l'envoi du mail.”; - l'intérieur
IOException
message: “Impossible de lire les données de la connexion de transport: Une connexion existante a dû être fermée par l'hôte distant.”, et - à l'intérieur de l'intérieur
SocketException
est: “Une connexion existante a dû être fermée par l'hôte distant”.
Serveur SMTP dans les journaux d'EHLO, STARTTLS, STARTTLS et EHLO, puis plus rien.
Le résultat est exactement le même (succès pour le premier échantillon, échec pour le second) si les options sont déplacés à partir du code source de l'Application.config configuration/system.net/mailSettings/smtp/network
, et chaque fois que le numéro de port est spécifié ou non.
Étant donné que:
- selon la documentation,
SmtpClient.UseDefaultCredentials
“[g]ets ou définit une valeur Booléenne qui détermine si le DefaultCredentials sont envoyés avec la demande”, qui - “Pour une application côté client, [
CredentialCache.DefaultCredentials
] sont généralement les informations d'identification Windows (nom d'utilisateur, mot de passe et domaine) de l'utilisateur exécutant l'application”, et que - le code testé est un Windows Forms application côté client, l'exécution à partir du même compte dont les informations d'identification spécifiées dans le premier exemple ci-dessus,
pourquoi le deuxième échec d'exemple, alors que le premier fonctionne?
Sur un forum il a été suggéré que le problème peut être causé par le serveur SMTP de ne pas soutenir NTLM. Par EHLOing le serveur, il semble que NTLM est pris en charge, l'une des lignes de la réponse étant 250-AUTH GSSAPI NTLM
.
OriginalL'auteur Arseni Mourzenko | 2012-06-06
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devez spécifier les informations d'Identification.
Le UseDefaultCredentials est simple un drapeau de dire la SMTPClient à utiliser les informations d'Identification fournies pour les informations d'Identification de la propriété.
Voici quelques autres choses à essayer:
Il aide. Partiellement. Maintenant, une nouvelle exception est levée: “Le serveur SMTP nécessite une connexion sécurisée ou le client n'est pas authentifié. La réponse du serveur est: 5.7.3 Client n'est pas authentifié.”
Avez-vous spécifié EnableSsl ?
J'ai, comme indiqué dans ma question.
le SmtpClient ne pas fournir les informations d'identification. Le UseDefaultCredentials est un simple booléen pour dire la classe SmtpClient à utiliser les informations d'identification que vous lui fournissez. Vous fournissez les informations d'identification en les affectant à l' .Les informations d'identification de la propriété, comme indiqué dans ma réponse. Dans mon exemple, je suis simplement le défaut d'identification réseau, mais vous pouvez également faire une affectation explicite, comme le client.Les informations d'identification = new NetworkCredential(nom d'utilisateur, mot de passe)
OriginalL'auteur Magnus Johansson
Si UseDefaultCredentials est défini à true, cela ne signifie PAS utiliser les valeurs dans la informations d'Identification de la propriété. Au lieu de cela, cela signifie utiliser les informations d'identification de la "utilisateur actuellement connecté", qui, dans le cas de IIS web apps sera généralement le pool d'application de l'identité, et dans le cas d'un service Windows qui est de l'identité du service, et dans le cas d'une application de bureau, c'est l'identité de l'utilisateur connecté à Windows.
Voir le document Microsoft ( https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.usedefaultcredentials(v=vs. 110).aspx ), où il est dit que si UseDefaultCredentials est false (par défaut) et que vous ne fournissez pas de quoi que ce soit dans le informations d'Identification la propriété", puis le courrier est envoyé au serveur de manière anonyme".
OriginalL'auteur Gen1-1