加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C使用CSmtp库发送邮件

发布时间:2020-12-16 06:50: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(szSer
我正在尝试使用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_addr和gethostbyname不再工作了.

'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,&sockAddr.sin_addr);

#endif

if(retVal != 1)
{

    struct addrinfo *result = NULL;
    struct addrinfo hints;

    #ifdef LINUX
        memset(&hints,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);
    }               
}

基于:

视窗:

> 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读