我试图使用TcpClient类连接到smtp.live.com。在这里有一个很好的连接到Gmail的例子:Testing SMTP server is running via C#使用TcpClient类连接到smtp.live.com
不幸的是,当更新这个工作与smtp.live.com,我得到一个“IOException:由于意外的数据包格式握手失败” AuthenticateAsClient方法被调用。
我该如何解决这个问题?
class Program
{
static void Main(string[] args)
{
using (var client = new TcpClient())
{
var server = "smtp.live.com";
var port = 25;
client.Connect(server, port);
using (var stream = client.GetStream())
using (var sslStream = new SslStream(stream))
{
// Getting an IOException here
sslStream.AuthenticateAsClient(server);
using (var writer = new StreamWriter(sslStream))
using (var reader = new StreamReader(sslStream))
{
writer.WriteLine("EHLO " + server);
writer.Flush();
Console.WriteLine(reader.ReadLine());
}
}
}
Console.WriteLine("Press Enter to exit...");
Console.ReadLine();
}
}
我试过在AuthenticateAsClient中指定SslProtocol。 Tls或Ssl3都没有工作。
还试图提供RemoteCertificateValidation的回调,一直返回true,以防万一服务器证书无效。那也行不通。
注意:请不要建议我使用SmtpClient;我需要比它提供的更多的控制。
你需要什么样的控制是'SmtpClient'不提供? – jgauffin 2011-06-07 18:51:38
我正在创建一个SMTP代理,它将支持来自我们内部不支持TLS/SSL的一些程序的未加密连接。 SMTP代理服务器将接受来自这些程序的连接,并将信息转发到需要TLS/SSL的smtp.live.com服务器。 – 2011-06-08 12:42:14
为什么你不能使用SmtpClient进行出站连接?听起来只有代理中的inbount连接需要定制。 – jgauffin 2011-06-08 12:55:49