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 Linux的: > http://man7.org/linux/man-pages/man3/inet_pton.3.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |