各位大侠,救救小弟,写了下面这段邮件群发后,邮件发到50多封,程序就down掉了,问题不明!!100分求救!!!

bigbigbear 2004-03-22 10:46:28
各位大侠,救救小弟,写了下面这段邮件群发后,邮件发到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;
}
...全文
61 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanvi 2004-04-14
  • 打赏
  • 举报
回复
就是说线程死掉了
可能服务器SOKET没有响应造成你的SOCKET阻塞
bigbigbear 2004-04-13
  • 打赏
  • 举报
回复
这么久也没有人给我答复啊。。。。
rainsly 2004-03-30
  • 打赏
  • 举报
回复
up
bigbigbear 2004-03-30
  • 打赏
  • 举报
回复
完全发送就是没有把数据库中的所有的邮件地址都发送一遍,发到几百封时就停掉了
bigbigbear 2004-03-30
  • 打赏
  • 举报
回复
mark???对不起各位高手这是什么意思??我深知我很菜
jawibn 2004-03-29
  • 打赏
  • 举报
回复
mark
zhanvi 2004-03-25
  • 打赏
  • 举报
回复
什么是无法完全发送成功阿
bigbigbear 2004-03-25
  • 打赏
  • 举报
回复
楼上的大侠,我现在把strResponse设置成了1000000,现在能发很多封了,但是还是无法完全发送成功,不知哪位高手再帮忙找找问题,或者教授我如何来追踪这种异常。谢谢楼上的帮忙,让我看到了曙光!
UDX协议 2004-03-24
  • 打赏
  • 举报
回复
strResponse,
strCommand
缓冲区短了。越界造成
bigbigbear 2004-03-24
  • 打赏
  • 举报
回复
不是吧,各位大侠,小弟能力有限阿,帮帮我吧~~:(
dreamchild 2004-03-24
  • 打赏
  • 举报
回复
mark
bigbigbear 2004-03-24
  • 打赏
  • 举报
回复
后又修改后,还是差不多的情形,请各位帮忙看看,到底是什么问题呢?
#include <afxwin.h>
#include <afx.h>
#include <afxdb.h>
#include <stdio.h>
#include <memory.h>
#include <winsock.h>

void sendmail(SOCKET sock,LPCTSTR mail_str,LPCTSTR mail_content)
{
char strResponse[200];
char strCommand[200];
memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

char *to;

to=(LPSTR)mail_str;

sprintf(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);

memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

sprintf(strCommand, "MAIL FROM:<admin@vip.acergame>\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);

memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

sprintf(strCommand, "RCPT TO:<%s>\r\n",to);
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);

memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

sprintf(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);

memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

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);

memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

sprintf(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);

memset(strResponse,' ',sizeof(strResponse));
memset(strCommand,' ',sizeof(strCommand));

sprintf(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];
memset(content,' ',sizeof(content));

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 email 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;
}
bigbigbear 2004-03-24
  • 打赏
  • 举报
回复
谢谢楼上各位的关注,可是我是用的自己本机架设的SMTP虚拟服务器阿,没有被封掉的理由阿,但是在Debug状态下会在发送content的时候,recv函数那一步down掉,不过是偶然现象,所以很有可能在发的多的时候,就会在这一步停下,不知道recv函数有什么要注意的事情阿?请各位高手帮帮我吧,我真的是为之已经肝脑涂地了。本以为是内存泄漏可是现在改了,还是不行,不知道为什么,郁闷~~
zhanvi 2004-03-24
  • 打赏
  • 举报
回复
如果频繁的连接发送
有的服务器是会禁止你的IP的
不过50封太少了
以前我做的程序都是发送5000邮件才被封
程序DOWN掉可能是其他原因
winter_sui 2004-03-24
  • 打赏
  • 举报
回复
我把程序拿下来,改了一下。
虽然不是从数据库里读取信息。但单步执行,发一个mail是没错的。

有可能是服务器把你给禁止了,你短时间内发的邮件太多了。
bigbigbear 2004-03-22
  • 打赏
  • 举报
回复
我对VC的IDE的使用不是很熟,debug的过程中我从watch中看不出任何对我有所帮助的信息,真是脸红阿,想请各位高手帮我分析一下,希望大家给我这个菜鸟点帮助,好吗?先谢谢楼上对我教诲!:)
danscort2000 2004-03-22
  • 打赏
  • 举报
回复
你自己不会用DEBUG看看哪个地方出问题了?
看看有没有内存泄露什么的,

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧