Unsere Benutzer können auf Knopfdruck E-Mails von unserer ASP.NET-Webanwendung senden. In unserer Testumgebung ist etwas Seltsames los.
Wenn die Anwendung zum ersten Mal versucht, die E-Mail zu senden, wird die Ausnahme angezeigt:
Mailbox nicht verfügbar. Die Serverantwort lautete: 5.7.1 Der Client hat keine Berechtigung zum Senden als dieser Absender
Das Lustige ist, wenn der Benutzer erneut auf die Schaltfläche klickt (die Anwendung versucht also erneut, die E-Mail zu senden), funktioniert dies und die E-Mail wird gesendet.
Wenn Sie eine Weile warten, wird der Fehler erneut angezeigt. Wenn Sie jedoch zum zweiten Mal klicken, wird die E-Mail ohne Probleme gesendet. Wenn Sie schnell genug wären, um eine neue E-Mail zu senden, würde dies funktionieren.
Dies ist der (vereinfachte) Code, den wir verwenden:
Dim smtpClient As New SmtpClient(<smtp mail server goes here>)
smtpClient.UseDefaultCredentials = True
mailMessage.From = New MailAddress(<from address>)
smtpClient.Send(mailMessage)
Dies funktioniert jedoch in den Produktionsumgebungen. Wir verwenden Microsoft Exchange, ebenso wie unsere Kunden (die Produktionsumgebungen).
Hat jemand jemals etwas Ähnliches gehabt (Fehler beim ersten Mal, funktioniert beim zweiten Mal wie ein Zauber)?
Antworten:
Ich habe dies einige Male zuvor gesehen und hier sind die Ursachen, die ich gesehen habe. Denken Sie daran, dass diese nur in einer großen Umgebung gesehen wurden. Wenn Sie sich in einer einzelnen DC- oder Exchange-Serverumgebung befinden, gelten diese nicht.
Zunächst einmal hier der MS-Artikel dazu: http://support.microsoft.com/kb/895853 . Unter den möglichen Fällen können Sie sehen, dass viele Dinge im Spiel sind.
Eine der Relay-Berechtigungen Ihres Exchange-Servers ist nicht korrekt eingerichtet.
Dies ist höchstwahrscheinlich die Ursache. Die E-Mail nimmt beim ersten und zweiten Versuch möglicherweise eine andere Route ein, während dies für beide Nachrichten albern klingt. Überprüfen Sie, ob sie denselben Server durchlaufen. Wenn Sie unterschiedliche Pfade sehen, überprüfen Sie die Einstellungen auf dem fehlerhaften, möglicherweise wird ein einfaches Zulassungsrelais für authentifizierte Benutzer nicht überprüft.
AD-Berechtigungen sind falsch
Sie müssen über die Berechtigung "Senden als" für das Konto verfügen, das die Absenderadresse aus Ihrer E-Mail enthält. Wenn es manchmal funktioniert, andere jedoch nicht, kann es sich um unterschiedliche Pfade beim Mail-Routing handeln, zwischen denen unterschiedliche Berechtigungen bestehen.
Die Authentifizierung funktioniert nicht richtig.
In der ersten Instanz des Skripts kann es sein, dass die Authentifizierung fehlschlägt. In diesem Fall wird die E-Mail verweigert, da Sie keine Berechtigung haben. Im zweiten Durchgang des Skripts ist die Authentifizierung erfolgreich. Leider kenne ich ASP nicht gut genug, um den obigen Code zu verstehen oder Ratschläge zur Behebung zu geben. smtpClient.UseDefaultCredentials ist möglicherweise nicht der richtige Code für Ihre Umgebung. Dies wird nur authentifiziert, wenn dies vom Server angefordert wird, und verwendet die Anmeldeinformationen des lokal angemeldeten Benutzers. Wenn der Server beim ersten Mal nicht nach einer Authentifizierung fragt, werden Sie nicht autorisiert und haben möglicherweise keine Berechtigung zum Senden. Versuchen Sie, es in einen Code zu ändern, der sich immer authentifiziert.
Einer Ihrer DCs oder globalen Kataloge ist veraltet oder enthält schlechte Informationen.
Dies ist selten, aber es ist möglich, dass Ihre Domänencontroller nicht synchron sind. Überprüfen Sie die Serverinformationen auf den Von- und Zu-Konten über ldap oder adsi edit und stellen Sie sicher, dass sie über alle DCs hinweg identisch sind.
Überprüfen Sie in allen Fällen die Protokolle auf dem Exchange-Server und stellen Sie sicher, dass die SMTP-Protokollierung für alle Felder aktiviert ist. Verwenden Sie die Nachrichtenverfolgung, um genau zu sehen, auf welche Server diese Nachricht trifft.
quelle
Mir scheint, Sie haben möglicherweise die SMTP-Authentifizierung auf dem Mailserver aktiviert, sie jedoch nicht in den Code aufgenommen. In einem solchen Fall wird beim ersten Versuch, eine Nachricht zu senden, die Authentifizierung effektiv durchgeführt, die Nachricht wird jedoch nicht gesendet. Das nächste Mal, wenn der Benutzer authentifiziert wird und die Nachricht durchgeht.
quelle
Für mich war das Problem, dass in meiner Konfigurationsdatei bereits das Konto "Von" angegeben war. Als ich versuchte, dies
mailMessage.From = New MailAddress(<from address>)
in meinem Code zu tun , wurde es angezeigt, weil die "von" -E-Mail in meinem Code nicht mit der "von" -E-Mail in meiner Konfigurationsdatei übereinstimmte.quelle
Versuche dies :
quelle