在.NET中使用TLS“手动”的SMTP

时间:2013-02-08 20:11:08

标签: .net ssl smtp

我想通过SMTP服务器发送电子邮件,但不想使用内置的SmtpClient类,因为它无法控制电子邮件标头。

我发现an example of sending SMTP mail in .NET基本上归结为:

string server = "smtp.server.com";
int port = 25;

IPHostEntry host = Dns.GetHostEntry(server);
IPEndPoint endPt = new IPEndPoint(host.AddressList[0], port);

using (Socket s = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp)) {
    s.Connect(endPt);

    Action<string> Senddata = (string msg) => {
        byte[] _msg = Encoding.ASCII.GetBytes(msg);
        s.Send(_msg, 0, _msg.Length, SocketFlags.None);
    };

    Senddata("HELO " + server);
    // Rest of email data elided
}

但据推测,这对于需要TLS的连接不起作用,例如Gmail的SMTP服务器。

是否有一种通过明确的SSL连接进行此类交换的直接方式,例如使用STARTTLS SMTP命令?我不太了解SSL协议,当然也不想陷入困境,试图编写自己的实现。我希望有一种方法可以使用SslStream类或其他东西来发送数据。

0 个答案:

没有答案