Как проверить состояние почтового сервера (SSL, SMTP-порт 465) в C ++ - PullRequest
0 голосов
/ 10 июня 2009

Пинг не работает. Telnet не вариант, отправка почты также. Предпочтительно функция из библиотеки, которая возвращает истину или ложь.

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 июня 2009

Просто установите SSL-соединение с SMTP-сервером и попытайтесь прочитать строку из потока. Сервер должен отправить приветственное сообщение, как только вы установите соединение типа «220 smtp.domain.com»

1 голос
/ 10 июня 2009

Если под работой вы подразумеваете открытый, вы можете просто подключиться к порту и посмотреть, будет ли сокет успешно открыт.

Если вы имеете в виду, что он принимает действительный SMTP через 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...