C++ 如何在C+中检查邮件服务器(SSL、SMTP端口465)的状态+;

C++ 如何在C+中检查邮件服务器(SSL、SMTP端口465)的状态+;,c++,email,smtp,C++,Email,Smtp,平不工作了。Telnet不是一个选项,也可以发送邮件。最好是库中返回true或false的函数 谢谢。如果您所说的“工作”是指“打开”,那么您只需连接到端口,查看套接字是否成功打开即可 如果您的意思是它通过SSL接受有效的SMTP,那么您需要一个库来连接并发出一个简单的SMTP命令,如HELO或其他命令 有这方面的库代码和示例 win32的连接代码示例: #include <winsock2.h> #include <ws2tcpip.h> #include <ws

平不工作了。Telnet不是一个选项,也可以发送邮件。最好是库中返回true或false的函数


谢谢。

如果您所说的“工作”是指“打开”,那么您只需连接到端口,查看套接字是否成功打开即可

如果您的意思是它通过SSL接受有效的SMTP,那么您需要一个库来连接并发出一个简单的SMTP命令,如HELO或其他命令

有这方面的库代码和示例

win32的连接代码示例:

#include <winsock2.h>
#include <ws2tcpip.h>
#include <wspiapi.h>

void tryconnect(const char * host, const char * port)
{
    SOCKET Socket = INVALID_SOCKET;
    struct addrinfo *resAddrInfo = NULL;
    struct addrinfo *ptr = NULL;
    struct addrinfo hints;
    int result = 0;

    printf("Connecting to %s:%s\n", host, port);

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    result = getaddrinfo(host, port, &hints, &resAddrInfo);
    if (result != 0)
    {
        printError("getaddrinfo failed");
        return;
    }

    ptr = resAddrInfo;
    Socket = WSASocket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol, NULL, 0, WSA_FLAG_OVERLAPPED);
    if (Socket == INVALID_SOCKET)
    {
        printError("Error Creating Socket");
        freeaddrinfo(resAddrInfo);
        return;
    }

    result = WSAConnect(Socket, ptr->ai_addr, (int)ptr->ai_addrlen, NULL, NULL, NULL, NULL);
    if (result != 0)
    {
        printError("Error Connecting");
        closesocket(Socket);
        freeaddrinfo(resAddrInfo);
        return;
    }

    freeaddrinfo(resAddrInfo);
    printf("Success!\n\n");
}
#包括
#包括
#包括
void tryconnect(常量字符*主机,常量字符*端口)
{
插座=无效的_插座;
struct addrinfo*resAddrInfo=NULL;
struct addrinfo*ptr=NULL;
结构addrinfo提示;
int结果=0;
printf(“连接到%s:%s\n”,主机,端口);
零内存(&提示,sizeof(提示));
hits.ai_family=AF_unsec;
hits.ai_socktype=SOCK_流;
hits.ai_protocol=IPPROTO_TCP;
结果=getaddrinfo(主机、端口、提示和重寻址信息);
如果(结果!=0)
{
打印错误(“getaddrinfo失败”);
返回;
}
ptr=重新寻址信息;
Socket=WSASocket(ptr->ai_系列,ptr->ai_socktype,ptr->ai_协议,NULL,0,WSA_标志重叠);
if(Socket==无效的_Socket)
{
printError(“创建套接字时出错”);
freeaddrinfo(resAddrInfo);
返回;
}
结果=WSA连接(套接字,ptr->ai_addr,(int)ptr->ai_addrlen,NULL,NULL,NULL);
如果(结果!=0)
{
打印错误(“连接错误”);
插座;
freeaddrinfo(resAddrInfo);
返回;
}
freeaddrinfo(resAddrInfo);
printf(“成功!\n\n”);
}

只需与SMTP服务器建立SSL连接,并尝试从流中读取一行即可。当您尝试通过ping连接到服务器时,服务器应该在您建立“220 smtp.domain.com”之类的连接后立即发送问候消息。我得到的结果是超时,但服务器正在工作。谢谢,但Chilkat是20兆库,有点过分:)如果您只是尝试复制ping,然后打开一个到该端口的套接字,看看它是否连接。John,您对该函数使用的头是什么winsock,WS2TCIP??另外,使用Ws2_32.lib库,如果这样做,请不要忘记通过SSL链接连接:)