有没有办法对SMTP服务器进行基于应用程序的循环轮换?

时间:2012-10-17 03:57:18

标签: c# load-balancing smtpclient

我使用的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服务器?

例如, 我有4个SMTP服务器: 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.104 ,我有 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

1 个答案:

答案 0 :(得分: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完成的工作,如果可能,我建议采用这种方法。