2013-12-26 2 views
17

Я пытаюсь отправить почту C#, когда определенные значения в базе данных пересекают ее пороговое значение.«Была предпринята попытка получить доступ к сокету способом, запрещенным его разрешениями доступа» при использовании SMTP

Я уже разрешил порт 25,587 и 465 в брандмауэре Windows. И отключил возможность предотвращения массовой почты в Антивирусе. Код, я использую приведен ниже

using System.Net; 
using System.Net.Mail; 
using System.Net.Security; 
using System.Security.Cryptography.X509Certificates; 

MailMessage mailMsg = new MailMessage(); 
     mailMsg.To.Add("[email protected]"); 
     // From 
     MailAddress mailAddress = new MailAddress("[email protected]"); 
     mailMsg.From = mailAddress; 


     // Subject and Body 
     mailMsg.Subject = "MCAS Alert"; 
     mailMsg.Body = "Parameter out of range"; 


     SmtpClient smtpClient = new SmtpClient("smtp.servername.com", 25); 
     smtpClient.UseDefaultCredentials = false; 
     smtpClient.Timeout = 30000; 
     System.Net.NetworkCredential credentials = 
      new System.Net.NetworkCredential("username", "passwrod"); 
     smtpClient.Credentials = credentials; 
     smtpClient.EnableSsl = true; 
     //ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; 
     smtpClient.Send(mailMsg); 

трассировки стека

[SocketException (0x271d): An attempt was made to access a socket in a way forbidden by its access permissions xx.xx.xx.xx:25] 
    System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +208 
    System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) +464 

[WebException: Unable to connect to the remote server] 
    System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6) +6486360 
    System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback) +307 
    System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback) +19 
    System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) +324 
    System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) +141 
    System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) +170 
    System.Net.Mail.SmtpClient.GetConnection() +44 
    System.Net.Mail.SmtpClient.Send(MailMessage message) +1554 

[SmtpException: Failure sending mail.] 
    System.Net.Mail.SmtpClient.Send(MailMessage message) +1906 
    Admin_Alert.SMTPAuth() in c:\Users\spandya\Documents\Visual Studio 2012\WebSites\WebSite3\Admin\Alert.aspx.cs:61 
    Admin_Alert.Page_Load(Object sender, EventArgs e) in c:\Users\spandya\Documents\Visual Studio 2012\WebSites\WebSite3\Admin\Alert.aspx.cs:22 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 
    System.Web.UI.Control.OnLoad(EventArgs e) +92 
    System.Web.UI.Control.LoadRecursive() +54 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772 

Что еще я здесь отсутствует? входящие правила брандмауэра существуют для этих конкретных адресов портов.

+1

- ошибка, поступающая с отправляющей машины или принимающей? –

+0

Проверьте изменение для Stack Trace – SPandya

+0

Вы пробовали Telnetting для этого порта с данной машины, чтобы убедиться, что маршрут открыт? Что-то вроде 'telnet smtp.mydomain.com 25' –

ответ

9

Хорошо, так важно понимать последствия здесь.

Документы говорят, что SSL более 465 не поддерживается в SmtpClient.

Похоже, у вас нет выбора, кроме как использовать STARTTLS, который может не поддерживаться вашим почтовым узлом. Вы, возможно, придется использовать другую библиотеку, если ваш сервер требует использования SSL через 465.

Цитируется из http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl(v=vs.110).aspx

Класс SmtpClient поддерживает только Service Extension SMTP для Secure SMTP через Transport Layer Security, как определено в RFC 3207 В этом режиме сеанс SMTP начинается по незашифрованному каналу, затем клиентская команда STARTTLS выдает сервер для переключения на безопасную связь с использованием SSL. См. RFC 3207, опубликованную Целевой группой Internet Engineering Task Force (IETF) для получения дополнительной информации.

Альтернативный метод подключения - это когда сеанс SSL устанавливается перед тем, как отправлять команды протокола. Этот метод соединения иногда называют SMTP/SSL, SMTP через SSL или SMTPS и по умолчанию использует порт 465. Этот альтернативный метод подключения с использованием SSL в настоящее время не поддерживается.

+0

Ну, нужный порт, на который я нацелился, равен 25. И я пытаюсь отправить почту, используя электронную почту в Outlook, а не в gmail. – SPandya

+1

@SPandya Вы не можете «отправлять почту» с помощью Outlook. Outlook - почтовый клиент. Вам нужен исходящий SMTP-шлюз. В большинстве случаев (например, для бизнеса) внешний вид подключается к серверу Microsoft Exchange, который является шлюзом SMTP, который вы будете использовать. Многие интернет-провайдеры не разрешают жителям размещать почту SMTP (из-за бот-сетей и зараженных спамовых компьютеров) – SlaterCodes

+0

Я не отправляю ее из Outlook. Я делаю это с SMTP Mail Server, предоставляемого организацией. – SPandya

15

Проверьте, что ваш брандмауэр разрешает исходящий трафик и что вы не блокируетесь антивирусным программным обеспечением.

Я получил ту же проблему, и виновником было антивирусное программное обеспечение.

+0

Я разрешил порт 25, на который я нацелен как на исходящий, так и исходящий из брандмауэра Windows. – SPandya

+1

Я отключил антивирус и брандмауэр. – SPandya

+0

Изменилось ли исключение StackTrace для исключения? –

4

Брандмауэр Windows создавал эту ошибку для меня. SMTP пытался отправить GMAIL на порт 587. Добавление порта 587 в правило исходящего трафика [Outbound HTTP/SMTP/RDP] разрешило проблему.

3

Я получил эту ошибку:

System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions 

когда порт был использован другой программой.

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

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