2013-04-09 13 views
6

Mam konto pocztowe w usłudze Exchange Online. Teraz staram się sprawdzić, czy jestem w stanie wysyłać maile do klientów (na domenach varoius i na Microsoft Office 365) do C# aplikacjiWysyłanie wiadomości e-mail SMTP w pakiecie Microsoft Office 365 w .net

Próbowałem wykonawczych poniższy kod, ale otrzymuję błąd

"Zdalny certyfikat jest nieważny zgodnie z procedurą sprawdzania poprawności ."

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); 

Proszę o poradę, jeśli robię coś złego. Dziękuję bardzo z góry.

+0

możliwe duplikat [Wysyłanie wiadomości e-mail przy użyciu Smtp.mail.microsoftonline.com] (http://stackoverflow.com/questions/6656039/sending-email-using-smtp-mail-microsoftonline-com) – bubbassauro

+0

http : //www.softdeveloperszone.com/2013/04/send-email-through-office-365-outlook.html. Mają pęknięcie w tym. Pracowałem dla mnie – chamara

Odpowiedz

2

Spróbuj użyć:

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

Ten kod pozwoli Ci akceptować nieważnych certyfikatów.

+0

kiedy próbowałem powyższego otrzymuję inny wyjątek "Serwer SMTP wymaga bezpiecznego połączenia lub klient nie został uwierzytelniony Odpowiedź serwera: 5.7.1 Klient nie został uwierzytelniony" – user166013

+0

Czy spojrzałeś na: http: //support.microsoft.com/kb/2600912/en? –

+0

@Garath link jest zepsuty :-( – johnnycardy

1

Błąd

Serwer SMTP wymaga bezpiecznego połączenia lub klient nie był uwierzytelnione. Odpowiedź serwera: 5.7.1 Klient nie był uwierzytelniony

często się zdarza, gdy powiązane hasło konta użytkownika wygasło lub konto jest zablokowane. Spróbuj ustawić "Nigdy nie wygasaj hasła użytkownika" w Active Directory, jeśli nie narusza to zasad haseł twojej firmy :) Stało się to podczas testowania za pomocą usługi Exchange Online A/c.

+0

Skonfigurowałem nowego użytkownika specjalnie do logowania za pośrednictwem SMTP. Dostałem ten błąd, ponieważ podczas pierwszego logowania użytkownik musiał zmienić swoje hasło. Przez chwilę byłem zdezorientowany! – johnnycardy

10

to działa na mnie (edycja z 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(); 
     } 
+0

Czy ktoś wie, czy można to zrobić bez wprowadzania hasła w postaci zwykłego tekstu? – TizzyFoe

+0

Otrzymuję komunikat zwrotny bez błędu, ale nie wysyła wiadomości? Czy możesz mi pomóc? – Peter

+0

masz e.Error = zero? e.Cancelled = true/false? spróbuj client.EnableSsl = false; – Zakos

2

Spróbuj smtp.office365.com zamiast smtp.outlook.office365.com

1

w niektórych przypadkach TLS może powodować problemy z używaniem smtp.office365.com jako SMTP z C#. Spróbuj następującą linię przed Send (MSG) oświadczenie (nadrzędne .TargetName):

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

Ten działa na mnie

0

Jest to również najlepszy sposób wysyłania poczty. Próbowałem tego w moim projekcie i działałem dobrze.

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); 
Powiązane problemy