Warum SmtpClient.UseDefaultCredentials ignoriert?
Ich versuche zum senden von e-mails über eine domain-SMTP-server verwendet die Integrierte Windows-Authentifizierung. Wenn explizite Angabe der Anmeldeinformationen, funktioniert alles einwandfrei:
using (var client = new SmtpClient("<Server>"))
{
client.Credentials = new NetworkCredential("<User name>", "<Password>");
client.EnableSsl = true;
client.Send(...);
}
SMTP-server-logs zeigen, EHLO, STARTTLS STARTTLS und EHLO, dann AUTH, MAIL, etc.
Wenn, auf der anderen Seite, Standard-Anmeldeinformationen verwendet werden:
using (var client = new SmtpClient("<Server>"))
{
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Send(...);
}
- den
SmtpException
geworfen wird, mit einer Meldung "Fehler beim senden von mail."; - den inneren
IOException
Meldung: "Unable to read data from the transport connection: Ein vorhandener Anschluss wurde gewaltsam vom Remotecomputer host geschlossen.", und - die innere-innere
SocketException
ist: "Eine vorhandene Verbindung wurde zwangsweise geschlossen durch remote-host".
SMTP-server-logs zeigen, EHLO, STARTTLS STARTTLS und EHLO, dann nichts mehr.
Ist das Ergebnis genau das gleiche (Erfolg für die erste Probe, Ausfall für den zweiten), wenn die Optionen verschoben werden aus dem source-code zur App.config configuration/system.net/mailSettings/smtp/network
, und wenn Sie die port-Nummer angegeben ist oder nicht.
Da:
- laut der Dokumentation,
SmtpClient.UseDefaultCredentials
"[g]ets oder setzt einen booleschen Wert, der steuert, ob die DefaultCredentials-sind geschickt mit Anfragen", dass - "Für eine client-seitige Anwendung, [
CredentialCache.DefaultCredentials
] sind in der Regel die Windows-Anmeldeinformationen (Benutzername, Kennwort und Domäne) des Benutzers, der die Anwendung ausführt", und das - den getesteten code ist eine Windows Forms-client-Anwendung läuft auf dem selben Konto, dessen Anmeldeinformationen angegeben wurden in der ersten Probe oben,
warum das zweite Beispiel nicht, während das erste funktioniert?
In einem forum es wurde vorgeschlagen, , kann das Problem verursachen, indem Sie die SMTP-server unterstützt keine NTLM. Durch EHLOing dem server, es wird angezeigt, dass NTLM ist unterstützt, einer der response-Linien 250-AUTH GSSAPI NTLM
.
InformationsquelleAutor Arseni Mourzenko | 2012-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass Sie tatsächlich haben, um die Anmeldeinformationen anzugeben, wie gut.
Die UseDefaultCredentials nur ein flag erzählt die SMTPClient, verwenden Sie die Anmeldeinformationen, um die Anmeldeinformationen-Eigenschaft.
Hier sind einige andere Dinge zu versuchen:
Es hilft. Teilweise. Jetzt eine neue Ausnahme geworfen wird: “Der SMTP-server erfordert eine sichere Verbindung oder der client wurde nicht authentifiziert. Die Serverantwort war: 5.7.3 Client wurde nicht authentifiziert."
Haben Sie angegeben EnableSsl ?
Ich habe, wie in meiner Frage.
die SmtpClient keine Anmeldeinformationen. Die UseDefaultCredentials ist eine einfache Boolesche sagen die SmtpClient-Klasse zu verwenden die Anmeldeinformationen, die Sie angeben. Sie geben die Anmeldeinformationen an, indem Sie Sie .Anmeldeinformationen-Eigenschaft, wie in meiner Antwort. In meinem Beispiel bin ich einfach nur die Standard-Netzwerk-Anmeldeinformationen, aber Sie könnte auch tun, eine explizite Zuordnung, z.B. client.Credentials = new NetworkCredential(username, Passwort)
InformationsquelleAutor Magnus Johansson
Wenn UseDefaultCredentials auf true gesetzt ist, bedeutet es NICHT, die Werte in der Anmeldeinformationen Eigenschaft. Stattdessen, es bedeutet, dass die Verwendung der Anmeldeinformationen des "aktuell angemeldeten Benutzer", die im Fall von IIS-web-apps in der Regel werden die app-pool-Identität, und im Falle eines Windows-Dienstes die Identität des Dienstes, und im Fall einer desktop-Anwendung, es ist die Identität des angemeldeten Benutzers in Windows.
Finden Sie im Microsoft-Dokument ( https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.usedefaultcredentials(v=vs. 110).aspx ), wo es heißt, dass, wenn UseDefaultCredentials Wert false (die Standardeinstellung), und Sie bieten nicht alles, was in der Anmeldeinformationen Eigenschaft, "dann E-mail an den server gesendet wird anonym".
InformationsquelleAutor Gen1-1