Visual c++ CSMTPConnection::SendSimple(“正在进行重叠I/O操作”)中的错误997(错误IO挂起)

Visual c++ CSMTPConnection::SendSimple(“正在进行重叠I/O操作”)中的错误997(错误IO挂起),visual-c++,smtp,atl,Visual C++,Smtp,Atl,CSMTPConnection是atlsmtpconnection.h中的一个ATL VC++类。 代码: 使用VS2005构建。 部署在Windows 2008和Windows 2003混合服务器上的服务中约10个。 除一台windows 2003服务器外,任何地方都可以使用,其中SendSimple方法或Connect始终会产生错误997-重叠I/O操作正在进行。 我想我可以一直循环调用SendSimple,直到我没有收到错误,但是这样做行吗?也许在调用SendSimple之前,您应该等待成

CSMTPConnection是atlsmtpconnection.h中的一个ATL VC++类。 代码:

使用VS2005构建。 部署在Windows 2008和Windows 2003混合服务器上的服务中约10个。 除一台windows 2003服务器外,任何地方都可以使用,其中SendSimple方法或Connect始终会产生错误997-重叠I/O操作正在进行。
我想我可以一直循环调用SendSimple,直到我没有收到错误,但是这样做行吗?

也许在调用SendSimple之前,您应该等待成员函数返回TRUE?听起来好像您试图在与邮件服务器的连接完全建立之前发送消息。

从哪里得到错误r代码?GetLastError?您也尝试过WSAGetLastError吗?我不确定该类是否在Win32插槽中设置了错误信息。Connected属性只是检查用于与SMTP服务器通信的套接字句柄是否有效。如果Connect返回TRUE,则它已使用套接字发送HELO并收到响应,因此套接字必须有效。
static _TCHAR mailserver[ 256 ];
static _TCHAR mailsender[ 256 ];
static _TCHAR mailrecips[ 256 ];
static _TCHAR subject[ 256 ];
static _TCHAR msg[ 256 ];
static DWORD mailtimeout=10000;
static CSMTPConnection con;
...
if (con.Connect( mailserver, mailtimeout )){
  if (con.SendSimple( mailrecips, mailsender, subject, msg)) {
    // it worked
  } else {
    // it failed
  }
} else {
  // it failed
}