System.Net.Mail.SMTPClient がローカル IP バインドを行う方法で指定されたコードと同様のコードをたどろうとしています。複数の 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