gpt4 book ai didi

multithreading - 无法从 Delphi 中的线程使用 ICS (THtmlSmtpCli) 发送电子邮件

转载 作者:行者123 更新时间:2023-12-03 17:59:39 27 4
gpt4 key购买 nike

我们一直在使用ICS , THtmlSmtpCli 在主 VCL 线程和线程中从我们的应用程序发送电子邮件已有一段时间了。本周早些时候,我们发现我们无法再从 Threads 发送电子邮件。从主 VCL 线程发送它工作正常。

所以,我的问题有两个方面:

  1. 有人遇到过同样的问题吗?
  2. 是否有任何其他组件可供我们查看以从 Delphi Apps 发送电子邮件。

我们使用的代码如下...

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;

问候,彼得。

最佳答案

要回答您的第二个问题,您可以使用 Delphi 附带的 Indy。它具有 TIdMessageTIdSMTP 组件,以及一个 TIdMessageBuilderHtml 实用程序类。

关于multithreading - 无法从 Delphi 中的线程使用 ICS (THtmlSmtpCli) 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9990783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com