Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c/c+;连接到gmail smtp服务器+;(插座)_C++_Email_Winsock2 - Fatal编程技术网

C++ 使用c/c+;连接到gmail smtp服务器+;(插座)

C++ 使用c/c+;连接到gmail smtp服务器+;(插座),c++,email,winsock2,C++,Email,Winsock2,我试图用纯套接字连接到谷歌smtp服务器(“smtp.gmail.com”)。 我创建了一个套接字,当我读取数据时,connect只给我“54”或“52”或“53”或“54” sockaddr\u在用; WSADATA WSADATA; 结构主机*远程主机; int result=WSAStartup(MAKEWORD(2,2)和wsaData); 如果(结果!=无错误){ std::cout h_addr_list[0]; service.sin_port=htons(25); if(conn

我试图用纯套接字连接到谷歌smtp服务器(“smtp.gmail.com”)。 我创建了一个套接字,当我读取数据时,connect只给我“54”或“52”或“53”或“54”

sockaddr\u在用;
WSADATA WSADATA;
结构主机*远程主机;
int result=WSAStartup(MAKEWORD(2,2)和wsaData);
如果(结果!=无错误){
std::cout h_addr_list[0];
service.sin_port=htons(25);
if(connect(sock,(SOCKADDR*)和service,sizeof(service))==SOCKET\u错误){
WSACleanup;
返回退出失败;
}
char senddata[]=“STARTTLS”;
read_socket();
发送(sock、EHLO、strlen(EHLO)、0);
read_socket();
发送(sock,senddata,strlen(senddata),0);

std::cout显然,第一个
recv()
只返回响应的第一行

250-smtp.gmail.com为您服务,[1.2.3.4]
(地址不同)


您有两种选择。要么在读取之前等待一段时间以便获得所有响应,要么在循环中读取(更好的主意),直到收到来自SMTP服务器的所有响应。

recv
将缓冲区作为参数并返回接收的字节数,
bytesRecv
在代码中是接收的字节数(54字节)而不是字节,要找到谷歌的答案,你需要显示
recvbuf

std::cout << recvbuf << std::endl;

std::难道你的代码看起来不错,你的read_socket函数代码在哪里?你作为
EHLO
发送什么?而
BUFSIZ
是经过编辑的吗?@phoenixstudio。我将EHLO定义为“EHLO localhost”。BUFFSIZ是sdio.h中的宏,它的int 512返回的52-54是
std::cout的输出
void read_socket() {
    int bytesRecv = recv(sock, recvbuf, BUFSIZ, 0);

    if (bytesRecv == 0 || bytesRecv == WSAECONNRESET) {
        std::cout << "Connection closed"<<std::endl;
        return;
    }

    std::cout << bytesRecv << std::endl;
}
std::cout << recvbuf << std::endl;