3

プログラムは、同じネットワーク内の複数のコンピューターで実行されます。メールは内部サーバー経由で送信されます。SmtpClient からメールを送信しようとすると、一部のコンピューターでは機能しますが、他のコンピューターでは次のようになります。

「System.Net.WebException: リモート サーバーに接続できません ---> System.Net.Sockets.SocketException: ターゲット マシンがアクティブに拒否したため、接続できませんでした 10.1.0.74:25」

私はそれを調べてみましたが、ファイアウォールまたはSMTPサーバーがリクエストをブロックしていることについて多くの回答がありました。問題は、特定のコンピューターでのみエラーが発生することであり、ファイアウォールの設定がどうあるべきかわかりません。

メールを送信するためのコードは次のとおりです。

public void SendMessage(string subject, string messageBody, string fromAddress, string toAddress)
    {
        MailMessage message = new MailMessage();
        SmtpClient client = new SmtpClient("10.1.0.74", 25);

        // Set the sender's address
        message.From = new MailAddress(fromAddress);

        // Allow multiple "To" addresses to be separated by a semi-colon
        if (toAddress.Trim().Length > 0)
        {
            foreach (string addr in toAddress.Split(';'))
            {
                if (addr.Trim() != "")
                    message.To.Add(new MailAddress(addr));
            }
        }

        // Set the subject and message body text
        message.Subject = subject;
        message.Body = messageBody;
        message.IsBodyHtml = true;

        // Set the SMTP server to be used to send the message
        //client.Host = "smtp.gmail.com";
        System.Net.NetworkCredential a = new System.Net.NetworkCredential("User", "Pass");
        //client.EnableSsl = true;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = a;
        // Send the e-mail message
        client.Send(message);
    }

編集: 動作していないコンピューターから IP を ping したところ、次の結果が得られました。 ここに画像の説明を入力

4

1 に答える 1

4

クライアントで SSL を有効にして、他のポートを試します。

client.EnableSsl = true;
client.Port = 587;
// or 
client.Port = 465;

また、cmd コマンドで接続を確認することもできます。

telnet smtp.gmail.com 587

通常、正常な応答は次のようになります。

220 mx.google.com ESMTP
于 2013-10-18T09:20:12.013 に答える