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

时间:2009-06-09 23:00:22

标签: c++ email smtp

Ping无效。 Telnet不是一个选项,也发送邮件。优选地,来自库的函数返回true或false。

感谢。

2 个答案:

答案 0 :(得分:1)

如果通过工作意味着打开,您只需连接到端口并查看套接字是否成功打开。

如果您的意思是它接受有效的SMTP over SSL,那么您需要一个连接并发布一个简单的SMTP命令(如HELO等)的库。

Chilkat包含库代码和示例。

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");
}

答案 1 :(得分:1)

只需与SMTP服务器建立SSL连接,然后尝试从流中读取一行。一旦建立连接,例如“220 smtp.domain.com”

,服务器就应该发送问候消息