it-swarm.com.de

Senden Sie SMTP-E-Mail-Tests von Microsoft Office 365 in .net

ich habe ein E-Mail-Konto für den Exchange Online-Dienst. Jetzt versuche ich zu testen, ob ich in der Lage bin, E-Mails an Kunden (in Varoius-Domänen und in Microsoft Office 365) über die Anwendung c # zu senden

Ich habe versucht, den folgenden Code zu implementieren, erhalte aber den Fehler 

"Das Remote-Zertifikat ist gemäß der Validierungsprozedur ungültig "

MailMessage mail = null;                
mail = new MailMessage();

string[] strToList = "[email protected]"              
foreach (string strID in strToList)
{
    if (strID != null)
    {
        mail.To.Add(new MailAddress(strID));
    }
}

mail.From = "[email protected]";
mail.Subject = "testing"
mail.IsBodyHtml = true;
mail.Body = "mail body";

SmtpClient client = new SmtpClient("smtp.Outlook.office365.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
NetworkCredential cred = new System.Net.NetworkCredential("[email protected]", "mypassword");
client.Credentials = cred;
client.Send(mail);

Bitte Rat, wenn ich etwas falsch mache. Vielen Dank im Voraus.

11
user166013

das funktioniert für mich (bearbeitet von source )


   ThreadPool.QueueUserWorkItem(t =>
            {
                SmtpClient client = new SmtpClient("smtp.office365.com",587);
                client.EnableSsl = true;
                client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");
                MailAddress from = new MailAddress("[email protected]", String.Empty, System.Text.Encoding.UTF8);
                MailAddress to = new MailAddress("[email protected]");
                MailMessage message = new MailMessage(from, to);
                message.Body = "The message I want to send.";
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.Subject = "The subject of the email";
                message.SubjectEncoding = System.Text.Encoding.UTF8;
                // Set the method that is called back when the send operation ends.
                client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
                // The userState can be any object that allows your callback 
                // method to identify this send operation.
                // For this example, I am passing the message itself
                client.SendAsync(message, message);
            });

        private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
        {
            // Get the message we sent
            MailMessage msg = (MailMessage)e.UserState;

            if (e.Cancelled)
            {
                // Prompt user with "send cancelled" message 
            }
            if (e.Error != null)
            {
                // Prompt user with error message 
            }
            else
            {
                // Prompt user with message sent!
                // as we have the message object we can also display who the message
                // was sent to etc 
            }

            // finally dispose of the message
            if (msg != null)
                msg.Dispose();
        }
12
Zakos

Dies ist auch der beste Weg, um E-Mails zu senden. Ich habe es in meinem Projekt ausprobiert und funktioniert gut.

 SmtpClient client = new SmtpClient("smtp.office365.com", 587);
        client.EnableSsl = true;
        client.Credentials = new System.Net.NetworkCredential("[email protected]", "[email protected]");
        MailAddress from = new MailAddress("From Address Ex [email protected]", String.Empty, System.Text.Encoding.UTF8);
        MailAddress to = new MailAddress("From Address Ex [email protected]");
        MailMessage message = new MailMessage(from, to);
        message.Body = "This is your body message";
        message.BodyEncoding = System.Text.Encoding.UTF8;
        message.Subject = "Subject";
        message.SubjectEncoding = System.Text.Encoding.UTF8;

        client.Send(message);
4
Shashi Keshar

In einigen Fällen kann die TLS-Authentifizierung Probleme bei der Verwendung von smtp.office365.com als SMTP von c # verursachen. Versuchen Sie die folgende Zeile vor der Send (msg) -Anweisung (überschreibt .TargetName):

client.TargetName = "STARTTLS/smtp.office365.com";

Dieser arbeitet für mich

3
Joe Frank

Versuchen Sie smtp.office365.com anstelle von smtp.Outlook.office365.com

2

Der Fehler 

Der SMTP-Server erfordert eine sichere Verbindung oder der Client war nicht authentifiziert Die Serverantwort war: 5.7.1 Client war nicht authentifiziert

tritt häufig auf, wenn das zugehörige Benutzerkontokennwort abgelaufen ist oder das Konto gesperrt ist. Setzen Sie in Active Directory die Option "Benutzerkennwort niemals verfallen", wenn dies nicht gegen die Richtlinien für das Unternehmenskennwort verstößt;.

1
hiFI

Versuchen zu benutzen:

ServicePointManager.ServerCertificateValidationCallback = 
    (sender, certificate, chain, sslPolicyErrors) => true;

Mit diesem Code können Sie ungültige Zertifikate akzeptieren.

Ori Nachum erwähnt in dem Kommentar: Dies ist eine sehr schlechte Praxis und sollte nur zu Testzwecken verwendet werden. Es ist ein Sicherheitsrisiko!

1
Piotr Stapp

Einstellung testen:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

Dadurch wird sichergestellt, dass der SecurityPoint des Dienstes TLS ist.
Bitte beachten Sie eine hier angebotene Einstellung 

ServicePointManager.ServerCertificateValidationCallback = 
    (sender, certificate, chain, sslPolicyErrors) => true;

Kann für Testzwecke gut sein - aber es ist ein großes Sicherheitsrisiko!
Nicht mit einem Produktkonto oder in einer Produktumgebung verwenden.

0
Ori Nachum