0

私はSMTPClient以下を使用するクラスを使用していますapp.config

  <system.net>
    <mailSettings>
      <smtp from="mailer &lt;no_reply@mysite.com&gt;">
        <network defaultCredentials="true" host="192.168.1.101" port="25"/>
      </smtp>
    </mailSettings>
  </system.net>

SMTP サーバー (たとえば 4 台のサーバー) を追加し、使用する SMTP サーバーでラウンドロビンを実行するコードを取得する方法はありますか?

たとえば、192.168.1.101、192.168.1.102、192.168.1.103、192.168.1.104 の4 つの SMTP サーバーがあり、8 つの電子メールを送信する必要があります。

私が達成したいことは次のとおりです。

Mail 1 sent using 192.168.1.101
Mail 2 sent using 192.168.1.102
Mail 3 sent using 192.168.1.103
Mail 4 sent using 192.168.1.104
Mail 5 sent using 192.168.1.101
Mail 6 sent using 192.168.1.102
Mail 7 sent using 192.168.1.103
Mail 8 sent using 192.168.1.104
4

1 に答える 1

0

これを行うために何かを実装するのはかなり簡単です (そして、これにアプローチする方法は無数にあるので、誰かがより良い方法を持っていると確信しています) が、これはあなたが探している効果を得るための迅速で簡単な方法です. これをアプリの永続オブジェクトにする方法があると思います。

public class SmtpQueue
{
    private Queue<string> _queue;

    public SmtpQueue(string[] ips)
    {
        _queue = new Queue<string>();

        LoadIps(ips);
    }

    private void LoadIps(string[] ips)
    {
        // load the ips
        foreach (string ip in ips)
            _queue.Enqueue(ip);
    }

    public string GetNext()
    {
        string nextIp = _queue.Dequeue();
        _queue.Enqueue(nextIp);
        return nextIp;
    }
}

次のように消費します。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.Host = mySmtpQueueInstance.GetNext();

何をするにしても、過度に複雑にしないでください。通常、これは DNS を使用して達成するものであり、可能であればそのアプローチをお勧めします。

于 2012-10-17T06:01:27.493 に答える