2

私は Visual Studio 2010、.NET 4.0 を使用しており、SMTPClient.TimeOut プロパティをテストして実際に SmtpException をスローさせようとしています。ただし、TimeOut プロパティを 1 ミリ秒に設定しても、1 ミリ秒未満で送信されているように見える電子メールが送信されますが、オブジェクトを調べると、timedOut というプライベート メンバー変数が設定されていることがわかります。 true は、実際にタイムアウトしたことを示します。

ここに画像の説明を入力

これが私のコードです:

try
{
            MailMessage emailMsg = new MailMessage(this.EmailFrom, this.EmailTo, this.EmailSubject, msg);
            //SmtpClient emailClient = new SmtpClient(this.EmailServer);
            SmtpClient emailClient = new SmtpClient();
            emailClient.Credentials = new System.Net.NetworkCredential("username", "password");


                emailMsg.IsBodyHtml = true;
                emailClient.Timeout = Properties.Settings.Default.SMTPTimeOut;
                emailClient.Timeout = 1;

                emailClient.Send(emailMsg);
                sendingEmail = true;

            return sendingEmail;
        }
        catch (Exception ex)
        {
              // Handle time out exception here.
         }

誰かがこれを見たことがありますか、これをテストするためのより良い方法を知っていますか? 現在、gmail の smtp にアクセスしています。

4

2 に答える 2

2

最終的にこれが機能していることをテストするために、ローカル マシンに非常に単純な TCP サーバー コンソール アプリを作成しました。これを行う方法については、次のチュートリアルを使用しました: http://bit.ly/XoHWPC

このコンソール アプリを作成することで、メールを送信するサービスをローカル マシン (127.0.0.1,25) に向けることができました。TCP サーバー コンソール アプリは接続を受け入れましたが、応答が返されません。

メールを送信するサービスが正常にタイムアウトしたため、正常に動作していることを最終的に確認できました。ガイド用のチュートリアルからの TCP サーバー コンソール アプリのスニペットを次に示します。時間があれば、チュートリアル全体を読むことをお勧めします。

Program.cs

using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;

namespace TCPServer
{
    class Program
    {
        static void Main(string[] args)
        {

            Server server = new Server();
        }
    }
}

サーバー.cs

using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;

namespace TCPServer
{
    public class Server
    {

        private TcpListener tcpListener;
        private Thread listenThread;

        public Server()
        {
            this.tcpListener = new TcpListener(IPAddress.Any, 25);
            this.listenThread = new Thread(new ThreadStart(ListenForClients));
            this.listenThread.Start();
        }

        private void ListenForClients()
        {
            this.tcpListener.Start();

            while (true)
            {
                //blocks until a client has connected to the server
                TcpClient client = this.tcpListener.AcceptTcpClient();

                //create a thread to handle communication 
                //with connected client
                Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
                clientThread.Start(client);
            }
        }

        private void HandleClientComm(object client)
        {
            TcpClient tcpClient = (TcpClient)client;
            NetworkStream clientStream = tcpClient.GetStream();

            byte[] message = new byte[4096];
            int bytesRead;

            while (true)
            {
                bytesRead = 0;

                try
                {
                    //blocks until a client sends a message
                    bytesRead = clientStream.Read(message, 0, 4096);
                }
                catch
                {
                    //a socket error has occured
                    break;
                }

                if (bytesRead == 0)
                {
                    //the client has disconnected from the server
                    break;
                }

                //message has successfully been received
                ASCIIEncoding encoder = new ASCIIEncoding();
                System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
            }

            tcpClient.Close();
        }
    }
}
于 2013-04-19T18:07:35.267 に答える
2

telnetが使えると思います。telnet をオンにして、その IP を smtp サーバーとして使用します。接続しないため、タイムアウトする必要があります。これはテストしていません。

http://technet.microsoft.com/en-us/library/aa995718(v=exchg.65).aspx

于 2013-04-18T17:48:02.027 に答える