it-swarm.com.de

SMTP 5.7.57 Fehler beim Versuch, E-Mails über Office 365 zu senden

Ich versuche, einen Code zum Senden von E-Mails über den authentifizierten SMTP-Dienst von Office 365 einzurichten :

var _mailServer = new SmtpClient();
_mailServer.UseDefaultCredentials = false;
_mailServer.Credentials = new NetworkCredential("[email protected]", "password");
_mailServer.Host = "smtp.office365.com";
_mailServer.TargetName = "STARTTLS/smtp.office365.com"; // same behaviour if this lien is removed
_mailServer.Port = 587;
_mailServer.EnableSsl = true;

var eml = new MailMessage();
eml.Sender = new MailAddress("[email protected]");
eml.From = eml.Sender;
eml.to = new MailAddress("[email protected]");
eml.Subject = "Test message";
eml.Body = "Test message body";

_mailServer.Send(eml);

Das scheint nicht zu funktionieren und ich sehe eine Ausnahme:

Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.7.57 SMTP; Client wurde nicht authentifiziert, um anonyme E-Mails während MAIL FROM zu senden
at System.Net.Mail.MailCommand.Send (SmtpConnection conn, Befehl Byte [], String from)
at System.Net.Mail.SmtpTransport.SendMail (MailAddress-Absender, MailAddressCollection-Empfänger, Zeichenfolge deliveryNotify, SmtpFailedRecipientException & exception)
bei System.Net.Mail.SmtpClient.Send (MailMessage-Nachricht)

Ich habe versucht, das Netzwerk-Tracing zu aktivieren und es scheint, dass sichere Kommunikationen hergestellt wurden (zum Beispiel sehe ich eine Zeile im Protokoll für den Befehl "STARTTLS"), und später gibt es eine Zeile im Protokoll. "Remote-Zertifikat wurde überprüft vom Benutzer gültig. ", und die folgenden Send()- und Receive()-Daten können nicht als Klartext gelesen werden und scheinen keine TLS/SSH-Panics zu enthalten.)

Ich kann dieselbe E-Mail-Adresse und dasselbe Kennwort verwenden, um mich bei http://portal.office.com/ anzumelden und die Outlook-E-Mail-E-Mail zum Senden und Lesen von E-Mails zu verwenden. Was kann dazu führen, dass die Authentifizierung fehlschlägt? wenn Sie E-Mails programmgesteuert versenden?

Gibt es eine Möglichkeit, den verschlüsselten Stream zusätzlich zu debuggen?

8
Rowland Shaw

In meinem Fall, nachdem ich all diesen Vorschlag ohne Erfolg ausprobiert hatte, wandte ich mich an den Microsoft-Support. Der Vorschlag bestand darin, das Kennwort zu ändern. 

Dies hat mein Problem behoben. 

Beachten Sie, dass das Kennwort nicht abgelaufen ist, da ich mich bei office365 erfolgreich angemeldet habe. Das Problem wurde jedoch durch das Zurücksetzen behoben.

Lektion gelernt: Vertrauen Sie dem Ablaufdatum des Office 365-Kennworts nicht, in meinem Fall ist das Kennwort nach 1-2 Monaten abgelaufen, aber es hat nicht funktioniert .. Dies führte mich dazu, in meinem Code nachzuforschen Viel Zeit wurde mir klar, dass das Problem im Office365-Kennwort lag, das "beschädigt" oder "vorzeitig abgelaufen" war.

Vergessen Sie nicht alle 3 Monate, das Passwort zu "aktualisieren".

4
Matteo Conta

Um das Debuggen zu erleichtern, wechseln Sie vorübergehend zu MailKit und verwenden einen Codeausschnitt wie den folgenden:

using System;

using MailKit.Net.Smtp;
using MailKit.Security;
using MailKit;
using MimeKit;

namespace TestClient {
    class Program
    {
        public static void Main (string[] args)
        {
            var message = new MimeMessage ();
            message.From.Add (new MailboxAddress ("", "[email protected]"));
            message.To.Add (new MailboxAddress ("", "[email protected]"));
            message.Subject = "Test message";

            message.Body = new TextPart ("plain") { Text = "This is the message body." };

            using (var client = new SmtpClient (new ProtocolLogger ("smtp.log"))) {
                client.Connect ("smtp.office365.com", 587, SecureSocketOptions.StartTls);

                client.Authenticate ("[email protected]", "password");

                client.Send (message);
                client.Disconnect (true);
            }
        }
    }
}

Dadurch wird die gesamte Transaktion in einer Datei mit dem Namen "smtp.log" protokolliert, in der Sie dann nachlesen können, wo möglicherweise Probleme auftreten.

Beachten Sie, dass smtp.log wahrscheinlich einen AUTH LOGIN-Befehl enthält, gefolgt von einigen Befehlen, die base64-codiert sind (dies sind Ihre Benutzer/Ihr Pass). Wenn Sie also das Protokoll freigeben, sollten Sie diese Zeilen unbedingt bereinigen.

Ich würde erwarten, dass dies den gleichen Fehler wie bei System.Net.Mail hat, aber es wird Ihnen helfen zu sehen, was los ist.

Angenommen, es schlägt fehl (und ich gehe davon aus, dass dies der Fall sein wird), ändern Sie SecureSocketOptions.None und/oder kommentieren Sie Authenticate() aus.

Sehen Sie, wie dies den Fehler ändert, den Sie sehen.

3
jstedfast

Stellen Sie sicher, dass Sie die tatsächliche Office365-E-Mail-Adresse für das Konto verwenden. Sie finden es, indem Sie in Outlook365 auf die Schaltfläche Profil klicken. Ich rang mit der Authentifizierung, bis mir klar wurde, dass die E-Mail-Adresse, die ich für die Authentifizierung verwenden wollte, nicht das E-Mail-Konto der Mailbox war. Die tatsächliche E-Mail-Adresse des Kontos kann folgende Form haben: [email protected]

3
Derek Wade

Wir haben unsere Arbeit gemacht, indem wir die Postfächer (von der Adresse) von "freigegeben" in "normal" konvertieren. Vor dieser Änderung beendete meine Anwendung das Senden von E-Mails, als wir von Google Mail zu Office 365 migrierten. Es waren keine weiteren Codeänderungen erforderlich, außer, dass der Host auf smtp.office365.com gesetzt wurde.

2
Johnie Karr

In meinem Fall bezog sich mein Problem nicht auf den Code, sondern auf das Exchange-Postfach. Nicht sicher warum, aber das hat mein Problem gelöst: 

  • Wechseln Sie zu den Exchange-Einstellungen für das Postfach dieses Benutzers und greifen Sie auf die E-Mail-Delegierung zu 
  • Entfernen Sie unter Senden alsNT AUTHORITY\SELF und fügen Sie das Konto des Benutzers hinzu.

Dadurch erhält der Benutzer die Berechtigung, E-Mails im eigenen Namen zu senden. In der Theorie sollte NT AUTHORITY\SELF dasselbe tun, aber aus irgendeinem Grund funktionierte das nicht.

Quelle: http://edudotnet.blogspot.com.mt/2014/02/smtp-Microsoft-office-365-net-smtp.html

1
Matt R

Bitte überprüfen Sie den Code, den ich getestet habe, um E-Mails mit Exchange Online zu senden:

        MailMessage msg = new MailMessage();
        msg.To.Add(new MailAddress("[email protected]", "XXXX"));
        msg.From = new MailAddress("[email protected]", "XXX");
        msg.Subject = "This is a Test Mail";
        msg.Body = "This is a test message using Exchange OnLine";
        msg.IsBodyHtml = true;

        SmtpClient client = new SmtpClient();
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential("[email protected]", "YourPassword");
        client.Port = 587; // You can use Port 25 if 587 is blocked
        client.Host = "smtp.office365.com";
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.EnableSsl = true;
        try
        {
            client.Send(msg);

        }
        catch (Exception ex)
        {

        }

 enter image description here Port (587) wurde für die Übermittlung der Nachricht definiert. Obwohl Port 587 keine STARTTLS erfordert, wurde die Verwendung von Port 587 zur gleichen Zeit populär wie die Erkenntnis, dass die SSL/TLS-Verschlüsselung der Kommunikation zwischen Clients und Servern ein wichtiges Sicherheits- und Datenschutzproblem darstellt.

1
Nan Yu

Sie müssen die Berechtigungsnachweisfunktion ändern. Hier ist der Ersatz, den Sie machen müssen:

veränderung

-*_mailServer.Credentials = new NetworkCredential("[email protected]", "password");*

dafür

-*_mailServer.Credentials = new NetworkCredential("[email protected]", "password", "domain");*
0
Calm

In meinem Fall ist das Passwort abgelaufen. Ich habe gerade das Passwort zurückgesetzt und es funktioniert wieder

0
lazydeveloper