我們一直在使用ICS,THtmlSmtpCli
來發送來自我們的應用程序的電子郵件一段時間,無論是在主VCL線程和線程中。本週早些時候,我們發現我們不再能夠從線程發送電子郵件。從主VCL線程發送它工作正常。無法通過德爾福的線程發送ICS(THtmlSmtpCli)的電子郵件
所以,我我的問題是雙重的:
- 有沒有人經歷了同樣的問題?
- 是否有任何其他組件可以用來從Delphi應用程序發送電子郵件。
我們使用的代碼如下...
FRunning := True;
FHtmlSmtpClient := THtmlSmtpCli.Create(nil);
with FHtmlSmtpClient do
begin
Port := '25';
Host := FHost;
AuthType := smtpAuthNone;
ConfirmReceipt := FReadReceipt;
HdrPriority := smtpPriorityNone;
ContentType := smtpHtml;
FromName := FFromAddr;
HdrFrom := FFromAddr;
HdrTo := FToAddr;
HdrSubject := FSubject;
OnCommand := FHtmlSmtpClientCommand;
OnRequestDone := FHtmlSmtpClientRequestDone;
OnSessionClosed := FHtmlSmtpClientSessionClosed;
{ Start first operation to do to send an email }
{ Next operations are started from OnRequestDone event }
Connect;
end;
//Process the requests to send the email
procedure FHtmlSmtpClientRequestDone(Sender: TObject; RqType: TSmtpRequest; ErrorCode: word);
begin
if not FRunning then
Exit;
{ Start next operation, but first check if previous one was OK }
if ErrorCode <> 0 then
begin
FRunning := FALSE; { Terminate All-In-One demo }
Exit;
end;
case RqType of
smtpConnect:
begin
if FHtmlSmtpClient.AuthType = smtpAuthNone then
FHtmlSmtpClient.Helo
else
FHtmlSmtpClient.Ehlo;
end;
smtpHelo: FHtmlSmtpClient.MailFrom;
smtpEhlo: FHtmlSmtpClient.Auth;
smtpAuth: FHtmlSmtpClient.MailFrom;
smtpMailFrom: FHtmlSmtpClient.RcptTo;
smtpRcptTo: FHtmlSmtpClient.Data;
smtpData: FHtmlSmtpClient.Quit;
smtpQuit: FRunning := FALSE;
end;
end;
的問候,彼得。
好的,那麼它卡在哪裏?它是否無法解析服務器,無法連接,無法授權,無法發送,無法關閉?你在那裏有代碼 - 我們不能奇蹟般地分辨出什麼是錯的! – 2012-04-03 09:52:24
我使用Synapse http://ararat.cz/synapse/doku.php沒有任何問題。雖然我從來沒有嘗試從不同的線程發送電子郵件。但是我認爲Synapse應該沒有問題,因爲它們是基本對象(不是TComponent後代),如果你不想要的話,你不需要捕獲任何事件。 – oxo 2012-04-03 09:53:24
我懷疑需要一個消息泵。 – mj2008 2012-04-03 09:56:23