2015-04-08 6 views
1

У меня возникают проблемы с отправкой писем от моего TCP-клиента. Я могу получить электронные письма для отправки на любые или Yahoo email, но я не могу заставить их отправлять письмо, которое было создано на Microsoft Exchange Server (доступ через приложение Outlook), и я не знаю почему.Отправка писем в Gmail, Yahoo, Outlook

Вот код, который я использую для отправки электронной почты в настоящее время:

public void SendEmail(byte[] request) 
{ 
    using (TcpClient client = new TcpClient(this.Hostname, this.Port)) 
    { 
     using(var stream = client.GetStream()) 
     { 
      stream.Write(request, 0, request.Length); 
      stream.Flush(); 
     } 
    } 
} 

Это посылает его к Gmail или Yahoo но не Outlook

Байт [] запрос создается с помощью этой функции :

protected byte[] EncodeMessage(kMessage message) 
{ 
    if (message == null) 
     throw new ArgumentNullException("message"); 

    // Encode the message. 
    Asn1BerEncodeBuffer buffer = new Asn1BerEncodeBuffer(); 
    message.Encode(buffer); 

    // Write the encoded message to a byte array. 
    byte[] result = null; 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     buffer.Write(stream); 

     result = stream.ToArray(); 
    } 

    return result; 
} 

Где и kMessage и Asn1BerEncodeBuffer продлить Asn1Type

HostName - это IP Address в виде строки клиентского сервера. Я также подтвердил, что могу отправить электронное письмо на адрес электронной почты на сервере обмена Outlook, используя Windows Powershell и тест telnet, так что это похоже на мой код, который не позволяет его отправлять.

ответ

0

Вы должны использовать SMTPClient для отправки электронной почты. Это также позволяет получить все аутентификации.

Кроме того, вам необходимо установить/включить SMTP-канал в Exchange.

+0

Есть ли причина, по которой я не могу использовать 'TcpClient'? Если нет, я предпочитаю придерживаться 'TcpClient'. И, если я могу отправить электронные письма в Exchange с помощью PowerShell, не будет ли он еще включен/включен? Честно говоря, я не знаю. –

+0

Если вы можете отправлять электронную почту Exchange через SMTP с любым клиентом, чем это разрешено - хорошо. Вам все равно нужны специальные разрешения/аутентификация для Exchange, я думаю, что слишком много проблем, чтобы попытаться изобрести колесо здесь. Также я считаю, что этот код безопасности довольно сложный. SMTPClient сделает это за вас. – DrKoch

0

Также имейте в виду, что по умолчанию Exchange только принимает соединения TLS при отправке через SMTP.

Смежные вопросы