Visual c++ CSMTPConnection::SendSimple(“正在进行重叠I/O操作”)中的错误997(错误IO挂起)
CSMTPConnection是atlsmtpconnection.h中的一个ATL VC++类。 代码: 使用VS2005构建。 部署在Windows 2008和Windows 2003混合服务器上的服务中约10个。 除一台windows 2003服务器外,任何地方都可以使用,其中SendSimple方法或Connect始终会产生错误997-重叠I/O操作正在进行。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之前,您应该等待成
我想我可以一直循环调用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
}