各位大侠,救救小弟,写了下面这段邮件群发后,邮件发到50多封,程序就down掉了,问题不明!!100分求救!!!
各位大侠,救救小弟,写了下面这段邮件群发后,邮件发到50多封,程序就down掉了,问题不明!!100分求救!!!
#include <afxwin.h>
#include <afx.h>
#include <afxdb.h>
#include <stdio.h>
#include <winsock.h>
void sendmail(SOCKET sock,LPCTSTR mail_str,LPCTSTR mail_content)
{
char strResponse[255];
char strCommand[255];
char from[100]="admin@vip.dragonraja";
char *to;
to=(LPSTR)mail_str;
strcpy(strCommand, "HELO localhost\r\n");
send(sock, strCommand, lstrlen(strCommand), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out[HELO] !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
strcpy(strCommand, "MAIL FROM:<");
strcat(strCommand, from);
strcat(strCommand,">\r\n");
send(sock, strCommand, lstrlen(strCommand), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out[FROM] !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
strcpy(strCommand, "RCPT TO:<");
strcat(strCommand, to);
strcat(strCommand,">\r\n");
send(sock, strCommand, lstrlen(strCommand), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out[TO] !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
strcpy(strCommand, "DATA\r\n");
send(sock, strCommand, lstrlen(strCommand), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out[DATA] !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
send(sock, mail_content, strlen(mail_content), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out[Content] !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
strcpy(strCommand,"\r\n.\r\n");
send(sock, strCommand, lstrlen(strCommand), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
strcpy(strCommand, "QUIT\r\n");
send(sock, strCommand, lstrlen(strCommand), 0);
if(recv(sock, strResponse, lstrlen(strResponse), 0) == SOCKET_ERROR)
{
printf("Failed to connect!Check it out[QUIT] !!\n");
send(sock,"QUIT\r\n",7,0);
return;
}
//printf("%s\n",strResponse);
printf("[Success] %s\n",to);
}
void main()
{
CFile file;
CFileException ex;
char content[20000];
int cnt;
for(cnt=0;cnt<lstrlen(content);cnt++)
{
content[cnt] = ' ';
}
if(!file.Open("C:\\index.htm",CFile::modeRead,&ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
printf("%s\n",szError);
file.Close();
return;
}
UINT Byte=file.Read(content,lstrlen(content));
file.Close();
char con_str[200];
char dbname[100];
char user[100];
char password[100];
CDatabase *Conn;
strcpy(dbname,"mail");
strcpy(user,"zsl");
strcpy(password,"2000");
sprintf(con_str,"DSN=%s;UID=%s;PWD=%s",dbname,user,password);
Conn=new CDatabase();
try
{
Conn->OpenEx(con_str,CDatabase::noOdbcDialog);
printf("[Success] ODBC have been connected!!\n");
}
catch(CDBException * e)
{
printf("Error is %s",e->m_strError);
}
CRecordset Rs(Conn);
Rs.Open(CRecordset::forwardOnly, _T("SELECT mail FROM chr_log"));
CString mail;
while(!Rs.IsEOF())
{
SOCKET sock;
struct sockaddr_in sin;
WSADATA wsadata;
WORD vVersionRequested;
vVersionRequested = MAKEWORD(2, 0);
if(WSAStartup(vVersionRequested, &wsadata))
{
printf("Socket Loading failed !Check it out !");
return;
}
if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
printf("Socket Create failed! Check it out !");
return;
}
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(25);
if(connect(sock, (sockaddr *)&sin, sizeof(sockaddr)) == SOCKET_ERROR)
{
closesocket(sock);
printf("Failed to connect !Retry!!");
return;
}
Rs.GetFieldValue(short(0),mail);
printf("Mail is:%s\n",mail);
sendmail(sock, (LPCTSTR)mail, content);
closesocket(sock);
Rs.MoveNext();
}
Rs.Close();
Conn->Close();
return;
}