使用CSmtp库发送邮件

C++ Sending mail using CSmtp library

本文关键字:CSmtp 使用      更新时间:2023-10-16

我正在尝试使用CSmtp发送电子邮件http://www.codeproject.com/Articles/98355/SMTP-Client-with-SSL-TLS

这几行代码在这里造成了危害:

if((sockAddr.sin_addr.s_addr = inet_addr(szServer)) == INADDR_NONE)
{
    LPHOSTENT host;
    host = gethostbyname(szServer);
    if (host)
        memcpy(&sockAddr.sin_addr,host->h_addr_list[0],host->h_length);
    else
    {
#ifdef LINUX
        close(hSocket);
#else
        closesocket(hSocket);
#endif
        throw ECSmtp(ECSmtp::WSA_GETHOSTBY_NAME_ADDR);
    }               
}

inet_addrgethostbyname不再工作了。

'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

我怎么能得到这个工作使用inet_pton()getaddrinfo() ?我试图找到解决方案,但到目前为止还没有找到任何东西。

谢谢!

我认为应该是这样的:

#ifdef LINUX
   int retVal = inet_pton(AF_INET, czServer,  &sockAddr.sin_addr);
#else
   int retVal = InetPton(AF_INET, czServer,  &sockAddr.sin_addr);
#endif
if(retVal != 1)
{
    struct addrinfo *result = NULL;
    struct addrinfo hints;
    #ifdef LINUX
        memset(&hints, 0, sizeof(struct addrinfo));
    #else
        ZeroMemory( &hints, sizeof(hints) );
    #endif

    hints.ai_flags = AI_NUMERICHOST;
    hints.ai_family = AF_UNSPEC;

    getaddrinfo(argv[1], NULL, &hints, &result);
    if (host)
        memcpy(&sockAddr.sin_addr,result->ai_addr,result->ai_addrlen);
        freeaddrinfo(result);
    else
    {
#ifdef LINUX
        close(hSocket);
#else
        closesocket(hSocket);
#endif
        throw ECSmtp(ECSmtp::WSA_GETHOSTBY_NAME_ADDR);
    }               
}
基于:

Windows:

  • https://msdn.microsoft.com/en-us/library/windows/desktop/cc805844 (v = vs.85) . aspx
  • https://msdn.microsoft.com/en-us/library/windows/desktop/ms738520 (v = vs.85) . aspx
Linux:

  • http://man7.org/linux/man-pages/man3/inet_pton.3.html
  • http://linux.die.net/man/3/getaddrinfo
  • http://www.gta.ufrj.br/ensino/eel878/sockets/sockaddr_inman.html