这个问题就没有人能说的清楚吗!我太失望了!再出200分!有人接招吗?源代码也给你!(100分)

P

pogoo

Unregistered / Unconfirmed
GUEST, unregistred user!
其实我的思路很简单:要发送10封信(badding001~badding010@btamail.net.cn),用的
smtp server是:btamail.net.cn 。但每次总是前8封信能够正常发送,后两封则不行。
我把发送、接收的信息保存在了文本文件里,如下:
前8封邮件正常发送的信息
...........
recv: 250 Requested mail action okay, completed.
send: MAIL FROM:<qqqgs@btamail.net.cn>
recv: 553 Too much sessions in a connection.
send: RCPT TO:<badding009@btamail.net.cn>
recv: 503 Bad sequence of commands
send: DATA
recv: 503 Bad sequence of commands
............
我查了 Rfc2821 文档(Simple Mail Transfer Protocol),上面提及:在 MAIL FROM: 时,
如果邮件传输通道中仍有 session 尚未完成,则 Server 会答复 553 错误。但这就使我
感到奇怪了!根据最上面两行的信息:
end: .
recv: 250 Requested mail action okay, completed.
说明第8封信也已经发送完成,server也给了答复。但为何会出现 “Too much sessions in
a connection.”信息。我的程序源代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, ExtCtrls, IdAntiFreezeBase, IdAntiFreeze;

type
TForm1 = class(TForm)
IdTCPClient1: TIdTCPClient;
Button1: TButton;
Memo1: TMemo;
Panel1: TPanel;
IdAntiFreeze1: TIdAntiFreeze;
Button2: TButton;
Panel2: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

var
MsgRowCount: Integer;
MailContentArray : Array of String;
EAList, MailReadFile : Text;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i, HangCount, MMailCounter : Integer;
StringList1 : TStringList;
sss, RcptToAddress : String;
begin
AssignFile(EAList, 'MailAddressList.txt'); //打开邮件地址列表文件
Reset(EAList);
//------------------------------------计算邮件文件的内容行数
StringList1:=TStringList.Create ;
StringList1.loadfromfile('Mz112717.msg');
MsgRowCount := StringList1.Count;
StringList1.Free;
SetLength(MailContentArray,MsgRowCount);
//-------------------------------------把邮件文本内容读入数组中
HangCount := 0;
AssignFile(MailReadFile, 'Mz112717.msg');
Reset(MailReadFile);
while not EoF(MailReadFile) do begin
ReadLn(MailReadFile, MailContentArray[HangCount]);
HangCount := HangCount + 1;
end;
CloseFile(MailReadFile);
MMailCounter := 0;
try
IdTCPClient1.Connect;
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
IdTCPClient1.WriteLn('HELO ' + 'liufs');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
while not EoF(EAList) do
begin
try
ReadLn(EAList, RcptToAddress);
IdTCPClient1.WriteLn('MAIL FROM:<' + 'qqqgs@btamail.net.cn' + '>');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
IdTCPClient1.WriteLn('RCPT TO:<' + RcptToAddress + '>');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
IdTCPClient1.WriteLn('DATA');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
for i := 0 to MsgRowCount-1 do
IdTCPClient1.WriteLn(MailContentArray);
IdTCPClient1.WriteLn('');
IdTCPClient1.WriteLn('.');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
MMailCounter := MMailCounter + 1;
Panel1.Caption := IntToStr(MMailCounter);
finally
IdTCPClient1.WriteLn('RSET');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss + #13 + #10;
end;
end;
IdTCPClient1.WriteLn('QUIT');
sss := IdTCPClient1.ReadLn;
Memo1.Lines[Memo1.Lines.count] := sss;
finally
IdTCPClient1.Disconnect;
end;
CloseFile(EAList);
ShowMessage('ok!');
end;
end.
有哪位老大知道?再不解决这个问题!我老大就要炒我了!!!如果分数不够!我可以
再加!只要你能解决!

 
要那个RESET干嘛。干掉他!
还不行的话我给你找找我以前编写的一个邮件炸弹。发100封都没有问题。
 
up........
 
删除 Reset(EAList);
 
to 憔悴
RESET 去掉了也不行啊!是不是每发完一封信,就要重新再连接啊!如果是这样,
那效率就太低了!
你编写的邮件炸弹能油给我吗?我的mail:bluexiaobai@btamail.net.cn
谢谢!!!
 
我连同代码加程序一起发给你了,但是代码我没有整理,你可以对照看。
我怕久了没有升级代码失效,试着给自己发了10封,结果还全都收到了。
又向你发了10封,呵呵
记得给分!!
 
to 憔悴:
程序收到!非常感激您的热情帮助!代码写的确实很棒!但还有一些问题值得探讨!我
已给你发了 mail ,地址是你给我发信时用的地址,请查收!
 
怎么会一样?我的是BCC结构不错,可是我没有叫你在RCPT TO里面加十个用户呀!
你可以用循环(i:=0 to 9)来进行我给你的那个过程。在这个过程里加上你个性的
东西(不重复),怎么不行呢?我今天就实验了一下,没有问题!

具体的东西我给你发信了。
 
服务器只支持最多8封同时发送。
 
憔悴老大能我发一份么?学习学习。[:)]
 
to :憔悴 pogoo
能否给我也发一份 学习学习
dippa@chinaren.com
thanx
 
to hamsoft:
能具体点吗?如果是这样,该怎样解决?
能否只与 SERVER 连接一次,等到把所有的信全部发送完毕,再与 SERVER 断开呢?
或者,每发一封信,都与 smtp server 重做连接与断开的工作,但这样,效率太低!

各位老大!咋办?
 
to :憔悴
有问题啊!!!
我已发了 mail 给你!请查收!地址是你给我发信时用的地址!
 
好东东,我也想要一份。
chenboby@sina.com
老大就愿我一次梦吧。
 
要!!!!!!!!!
sim_might@sohu.com
 
xie xie
wzb_shipman@163.com :)
 
憔悴兄,能给我一份源代码学习学习吗?
谢谢!
lfpsoft@163.com
 
大家到coda.8u8.com下载去吧。
 
TO 憔悴兄:
   同病相怜呀。
   烦请也发一份源码给我吧。我老板也要我做一个小的邮件发送软件,可以做了半天也没有做出来呀。
   先谢谢你啦。
 
TO 憔悴老兄:
烦请也发一份源码给我吧。
intcom@21cn.com 谢谢!
 
顶部