这是微软atlsmtpconnection.h中的一个函数。
好像是因为写得较早的原因,没有实现smtp的身份认认证要求而无法正常使用。我想在connect后加上一段关于身份认证的代码。
可惜只学过CSokcet的一些简单用法,不清楚winsock怎么用。希望能有好心人帮我指出下面这段代码,我如果想加上一些发送指定信息到已连接好的服务器,应该在哪里加代码只要给我指出在什么地方加代码,并给出一个发送函数用法示例就好了,谢谢
BOOL Connect(LPCTSTR lpszHostName, DWORD dwTimeout = 10000) throw()
{
ATLASSERT(lpszHostName != NULL); // If we're already connected
if (Connected())
{
return FALSE;
} if (!_g_smtp_init.Init())
{
return FALSE;
} CSocketAddr address;
if (address.FindAddr(lpszHostName, IPPORT_SMTP, 0, PF_UNSPEC, SOCK_STREAM, 0))
{
return FALSE;
} ADDRINFOT *pAI;

BOOL bRet = FALSE;
int nIndex = 0;
while ((pAI = address.GetAddrInfo(nIndex++)) != NULL)
{
// create the socket
m_hSocket = WSASocket(pAI->ai_family, pAI->ai_socktype, pAI->ai_protocol, NULL, 0, WSA_FLAG_OVERLAPPED); if (m_hSocket == INVALID_SOCKET)
{
return FALSE;
} bRet = FALSE;
WSAEVENT hEventConnect = WSACreateEvent();
if (hEventConnect != NULL)
{
if (SOCKET_ERROR != WSAEventSelect(m_hSocket, hEventConnect, FD_CONNECT))
{
if (WSAConnect(m_hSocket, pAI->ai_addr, (int)pAI->ai_addrlen, 
NULL, NULL, NULL, NULL))
{
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
DWORD dwWait = WaitForSingleObject((HANDLE) hEventConnect, dwTimeout);
if (dwWait == WAIT_OBJECT_0)
{
// make sure there were no connection errors.
WSANETWORKEVENTS wse;
ZeroMemory(&wse, sizeof(wse));
WSAEnumNetworkEvents(m_hSocket, NULL, &wse);
if (wse.iErrorCode[FD_CONNECT_BIT]==0)
{
bRet = TRUE;
}
}
}
}
} // we're done with the event
WSACloseEvent(hEventConnect);
}
if (bRet)
{
break;
}

shutdown(m_hSocket, SD_BOTH);
closesocket(m_hSocket);
m_hSocket = INVALID_SOCKET;
}