indy10+d7如何实现多线程发送email?思想或代码。在线等待中(25分)

  • 主题发起人 主题发起人 51zhan.com
  • 开始时间 开始时间
5

51zhan.com

Unregistered / Unconfirmed
GUEST, unregistred user!
单个的如下,如果是多个的用循环,就是不知道怎样用多线程来发送email?
IdSMTP1.Host := 'smtp.sina.com.cn';//'mx.mail.163.split.netease.com';////SMTP.163.com服务器Rs`7`@
IdSMTP1.Port :=25;//服务器端口W63gO8
IdSMTP1.Username:='ah_wcw@163.com';//在SMTP.163.com服务器上的用户名ID1
IdSMTP1.Password := 'abc';//在SMTP.163.com服务器上的密码#?E
IdSMTP1.AuthType := atDefault ;
try
IdSMTP1.Connect;//建立连接d.
except
Showmessage('连接SMTP服务器失败!');
Exit;
end;
try
with IdMessage1 do
begin
body.Clear;
Body.add('用户名及密码123');//邮件正文件内容,也可这样Body.Assign(memo1.lines);X+
From.address :='ah_wcw@163.com';//发件人名GY
Recipients.EMailAddresses :='ah_wcw@163.com';//收件人邮箱:"
Subject:='用户名及密码';//邮件标题dw{d{
end;
IdSMTP1.Send(IdMessage1);//发送邮件7c"Xy
showmessage('您的信件已成功发送');
finally

IdSMTP1.Disconnect;//断开连接^DpX
end;
 
indy10应该有SMTP的控件啊,用用就行了。
 
procedure TDecodeThread.Execute;
var
dwHandleSignaled: DWORD;
EventHandleArray: array [0..1] of THandle;
begin
inherited;
EventHandleArray[0] := 你定义的触发发邮件的事件;
EventHandleArray[1] := 你定义的退出发邮件线程的事件;
while Terminated do
begin
dwHandleSignaled := WaitForMultipleObjects(2, @EventHandleArray, False, INFINITE);
case dwHandleSignaled of
WAIT_OBJECT_0:
begin
ResetEvent(你定义的触发发邮件的事件);
//你发邮件的代码
end;
WAIT_OBJECT_0 + 1:
begin
Exit;
end;
end;
end;

主窗体创建时
你定义的触发发邮件的事件 := CreateEvent(nil, True, False, PChar('你定义的触发发邮件的事件'));
你定义的退出发邮件线程的事件 := CreateEvent(nil, True, False, PChar('你定义的退出发邮件线程的事件'));
在主窗体在需要发邮件的是后SetEvent(你定义的触发发邮件的事件);
在需要退出线程的时候SetEvent(你定义的退出发邮件线程的事件);
 
笔误:while Terminated do -> while not Terminated do
 
顶,多谢,问IdSMTP1和IdMessage1他们自己有没有什么自带简单的线程?
 
这段代码为何发了几封信就发不出去了,又如何解决?

procedure TfrmMain.Button4Click(Sender: TObject);
var
i : integer;
strToAddr : string;
begin
idsmtp1.Host := 'smtp.163.com';
idsmtp1.Port := 25;
idsmtp1.Username := 'ah_wcw@163.com';
idsmtp1.Password := 'abc';
idsmtp1.AuthType :=atDefault;
IdMessage1.Subject := frmMain.Edit1.Text;
IdMessage1.Body.Text := frmMain.Memo1.Text;
IdMessage1.From.Address := 'ah_wcw@163.com';
for i:=0 to intMailNum-1 do
begin
strToAddr := frmMain.StrGrdEmail.Cells[0,i+1];
IdMessage1.Recipients.EMailAddresses := strToAddr;
/// if FileExists(FAttachment) then TIdAttachment.Create(IdMsg.MessageParts, FAttachment);
try
idsmtp1.Connect;
idsmtp1.ConnectTimeout := 5000;
except
exit;
end;
try
idsmtp1.Send(IdMessage1);
Application.ProcessMessages;
StrGrdEmail.Cells[2,i+1] := '发送成功!';
lblWinNum.Caption := inttostr(WinNum);
except
Application.ProcessMessages;
StrGrdEmail.Cells[2,i+1] := '发送失败!';
lblFailNum.Caption := inttostr(FailNum);
end;
idsmtp1.Disconnect;
end;
end;
 
大哥,帮帮忙啊
 
后退
顶部