2013-04-09 8 views
6

У меня есть учетная запись электронной почты в службе Exchange Online. Теперь я пытаюсь проверить, если я могу отправить почту клиентам (на varoius областях и на Microsoft Office 365) через C# приложенияОтправить SMTP-тестирование электронной почты Microsoft Office 365 in .net

Я попытался реализации ниже код, но я получаю ошибку

«Удаленный сертификат недействителен в соответствии с процедурой проверки ».

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

Пожалуйста, советы, если я делаю что-то неправильно. Большое спасибо.

+0

возможно дубликат [Отправка электронной почты с помощью 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. У вас есть трещина. Работал для меня – chamara

ответ

2

Попробуйте использовать:

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

Этот код позволит вам принимать недействительные сертификаты.

+0

, когда я пробовал выше, я получаю еще одно исключение ». Для SMTP-сервера требуется безопасное соединение или клиент не был аутентифицирован. Ответ сервера: 5.7.1 Клиент не был аутентифицирован« – user166013

+0

Вы посмотрели: http: //support.microsoft.com/kb/2600912/ru? –

+0

@Garath ссылка не работает :-( – johnnycardy

1

Ошибка

SMTP, сервер требует защищенного соединения или клиент не проверку подлинности. Ответ сервера был: 5.7.1 Клиент не прошел проверку подлинности

часто происходит, когда связанный учетной записи пользователя пароль истек или учетная запись заблокирована. Попробуйте установить «Никогда не истекать пароль пользователя» в Active Directory, если это не нарушает вашу политику паролей вашей компании :) Это случилось со мной во время тестирования с помощью o365 Exchange Online A/c.

+0

Я установил нового пользователя специально для входа через SMTP. Я получил эту ошибку, потому что во время первого входа пользователь должен был изменить свой пароль. Некоторое время я смущался! – johnnycardy

10

это работает для меня (отредактированное 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

Кто-нибудь знает, можно ли сделать это, не вставляя текстовый пароль? – TizzyFoe

+0

Я получаю обратный вызов без ошибок, но он не отправляет почту? Вы можете мне помочь? – Peter

+0

У вас есть e.Error = null? e.Cancelled = true/false? попробуйте client.EnableSsl = false; – Zakos

2

Попробуйте smtp.office365.com вместо smtp.outlook.office365.com

1

В некоторых случаях проверка подлинности TLS может вызвать проблемы с использованием smtp.office365.com в качестве SMTP из C#. Попробуйте следующую строку перед оператором Send (MSG) (переопределяя .TargetName):

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

Это один работает для меня

0

Это также лучший способ для отправки почты. Я пробовал это в своем проекте и отлично работал.

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); 
Смежные вопросы