簡體   English   中英

2008R2服務器上的System.Net.Sockets.SocketException

[英]System.Net.Sockets.SocketException on 2008R2 Server

我有一個要在服務器上運行的程序,該程序能夠監視網絡上的各種服務器,並在涉及某些服務器的某些情況下發送電子郵件通知。

目前,我可以在本地計算機上運行該程序,並啟動電子郵件(使用gmail SMTP)。 但是,當我嘗試通過命令提示符在服務器上運行它時,它將引發以下異常:

Unhandled Exception: System.Net.Mail.SmtpException: Failure sending mail. --->
System.Net.WebException: Unable to connect to the remote server --->
System.Net.Sockets.SocketException: A connection attempt failed
because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond
xxx.xxx.xxx.xxx:587

與發送電子郵件相關的代碼非常簡單:

static void sendEmail(MailAddressCollection mailCollection, string emailSender,
                      string emailDisplayName, string emailPassword,
                      string subject, string body) {

    MailAddress fromAddress = new MailAddress(emailSender, emailDisplayName);

    SmtpClient smtpClient = new SmtpClient {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, emailPassword)
    };

    MailMessage message = new MailMessage {
        From = fromAddress,
        Subject = subject,
        Body = body
    };

    foreach (MailAddress mailAddress in mailCollection) {
        message.To.Add(mailAddress);
    }

    smtpClient.Send(message);

}

有問題的服務器是2008R2的服務器,沒有啟用Windows防火牆。 另外,端口25絕對是開放的,因為該服務器可以發送其他類型的電子郵件(特別是由Dynamics CRM電子郵件路由器生成的電子郵件)。

是什么導致此錯誤?

該問題與Gmail阻止嘗試發送電子郵件的服務器的IP地址有關。

嘗試使用Gmail帳戶發送電子郵件時,請先嘗試使用瀏覽器在該IP地址上的特定計算機上手動登錄Gmail。 我最終必須這樣做,並經歷驗證從我的服務器發送的電子郵件發送嘗試(以編程方式生成)是合法的過程。 如果您沒有像我一樣經歷此過程,則Gmail可以假設您的服務器不是合法的電子郵件發件人,並且可以繼續假設來自您IP地址的所有流量均無效-直到您如上所述正式驗證該IP地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM