我正在尝试遵循与System.Net.Mail.SMTPClient How do its local IP binding我在具有多个 IP 地址的机器上使用 Windows 7 和 .Net 4.0 中给出的代码类似的代码。我定义了BindIPEndPointDelegate
private static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
string IPAddr = //some logic to return a different IP each time
return new IPEndPoint(IPAddr, 0);
}
然后我使用发送我的电子邮件
SmtpClient client = new SmtpClient();
client.Host = SMTP_SERVER; //IP Address as string
client.Port = 25;
client.EnableSsl = false;
client.ServicePoint.BindIPEndPointDelegate
= new System.Net.BindIPEndPoint(BindIPEndPointCallback);
client.ServicePoint.ConnectionLeaseTimeout = 0;
client.Send(msg); //msg is of type MailMessage properly initialized/set
client = null;
第一次调用此代码时,会调用委托,并且无论设置什么 IP 地址,都会使用它。随后调用此代码时,将永远不会调用委托,即随后使用第一个 IP 地址。是否有可能改变这种每次调用代码时调用委托回调的情况?
我在想ServicePointManager(这是一个静态类)缓存第一次调用委托的结果。可以重置这个类吗?我不在乎性能。
谢谢你,OO