Не удается отправить электронное письмо с ICS (THtmlSmtpCli) из потока в Delphi - PullRequest
3 голосов
/ 03 апреля 2012

Мы уже некоторое время используем ICS , THtmlSmtpCli для отправки электронных писем из наших приложений, как в основной теме VCL, так и в темах.Ранее на этой неделе мы обнаружили, что мы больше не можем отправлять электронные письма из потоков.Отправка из основного потока 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;

С уважением, Питер.

1 Ответ

0 голосов
/ 03 апреля 2012

Чтобы ответить на ваш второй вопрос, вы можете использовать Indy, который поставляется с Delphi. Он имеет компоненты TIdMessage и TIdSMTP и служебный класс TIdMessageBuilderHtml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...