C#:通过套接字连接到 Gmail 的 SMTP 服务器
C#: Connect to Gmail's SMTP server via socket
我正在尝试通过 C# 套接字连接到 Gmail 的 SMTP 服务器。我知道有 类 用于此目的,但我正在学习 SMTP 协议并且我正在尝试实现它的功能。基本上我想要的是能够将 SMTP 命令发送到 Gmail 的 SMTP 服务器并获得响应,但我 运行 遇到了问题。我的代码如下所示:
static void Main(string[] args)
{
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
var host = Dns.GetHostEntry("smtp.gmail.com");
var endpoint = new IPEndPoint(host.AddressList[0], 465);
socket.Connect(endpoint);
Receive(socket);
Send(socket, string.Format("HELO {0}\r\n", Dns.GetHostName()));
Receive(socket);
}
}
static void Send(Socket socket, string message)
{
Console.WriteLine(">> {0}", message);
socket.Send(Encoding.UTF8.GetBytes(message));
}
static void Receive(Socket socket)
{
var buffer = new byte[500];
socket.Receive(buffer);
Console.WriteLine("<< {0}", Encoding.UTF8.GetString(buffer, 0, buffer.Length));
}
我的问题是:
- 完成这个程序需要很长时间,尽管它应该很快。
- 响应始终为空。但是,如果我尝试 运行 相同的代码并将端口设置为
587
,我会得到正常的响应。
我已经测试了使用命令行发送电子邮件并与 openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
连接的完整工作流程,它运行良好。
有什么我弄错了吗?如果是这样,它可能是什么?任何帮助将不胜感激。
Google 的 SMTP 受 TLS 保护 - 您必须实施加密,而不是向其写入裸数据。
您可能需要考虑切换到 TcpClient
和 SslStream
,而不是手动执行 Socket
。
这个 post 有一些指导:C# ssl/tls with socket tcp
我正在尝试通过 C# 套接字连接到 Gmail 的 SMTP 服务器。我知道有 类 用于此目的,但我正在学习 SMTP 协议并且我正在尝试实现它的功能。基本上我想要的是能够将 SMTP 命令发送到 Gmail 的 SMTP 服务器并获得响应,但我 运行 遇到了问题。我的代码如下所示:
static void Main(string[] args)
{
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
var host = Dns.GetHostEntry("smtp.gmail.com");
var endpoint = new IPEndPoint(host.AddressList[0], 465);
socket.Connect(endpoint);
Receive(socket);
Send(socket, string.Format("HELO {0}\r\n", Dns.GetHostName()));
Receive(socket);
}
}
static void Send(Socket socket, string message)
{
Console.WriteLine(">> {0}", message);
socket.Send(Encoding.UTF8.GetBytes(message));
}
static void Receive(Socket socket)
{
var buffer = new byte[500];
socket.Receive(buffer);
Console.WriteLine("<< {0}", Encoding.UTF8.GetString(buffer, 0, buffer.Length));
}
我的问题是:
- 完成这个程序需要很长时间,尽管它应该很快。
- 响应始终为空。但是,如果我尝试 运行 相同的代码并将端口设置为
587
,我会得到正常的响应。
我已经测试了使用命令行发送电子邮件并与 openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
连接的完整工作流程,它运行良好。
有什么我弄错了吗?如果是这样,它可能是什么?任何帮助将不胜感激。
Google 的 SMTP 受 TLS 保护 - 您必须实施加密,而不是向其写入裸数据。
您可能需要考虑切换到 TcpClient
和 SslStream
,而不是手动执行 Socket
。
这个 post 有一些指导:C# ssl/tls with socket tcp