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

标签 multithreading delphi email

我们一直在使用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/

相关文章:

php - Yii2 : Connection could not be established with host smtp. gmail.com [Connection refused #111] 在 godaddy 主机中

c# - 如何从页面上的线程关闭窗口?

multithreading - 使用CPort进行线程化

delphi - 带有复选框的 TreeView - 添加复选框行为

delphi - 我可以通过什么方式生成项目中使用的 DFM 列表?

php - 如何在网页上显示用于预览的 HTML 电子邮件?

php - 使用 cPanel 和 Laravel 将电子邮件传输到程序

c# - Task.ContinueWith() 父任务不等待子任务完成

Python - 对 numpy.random 函数的调用线程安全吗?

multithreading - Numba 是 "only"将我的代码改进了 4 倍。它能做得更好吗?