我想通过 SMTP 服务器发送电子邮件,但不想使用内置SmtpClient
类,因为它不能对电子邮件标头提供太多控制。
我发现了一个在 .NET 中发送 SMTP 邮件的示例,基本上可以归结为:
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
类或其他东西来发送数据。