использование компонента TIdSMTP для отправки почты на сервер с конфигурацией TLS / SSL - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужно отправлять письма, используя Delphi7 и компонент Indy10 TIdSMTP;почта должна быть отправлена ​​на сервер итальянской налоговой инспекции.

Я использовал простой компонент MAPI для отправки электронных писем, но теперь необходимо использовать компоненты Indy, но я их не знаю.

Я пытаюсь создать программу следующим образом:

procedure TForm1.BtCreateClick(Sender: TObject);
var
  DATA : TIdMessage;
  SMTP : TIdSMTP;
  SSL : TIdSSLIOHandlerSocketOpenSSL;
begin
  try
    SMTP := TIdSMTP.Create(nil);
    DATA := TIdMessage.Create(nil);
    SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    SSL.SSLOptions.Method := sslvTLSv1;
    SSL.SSLOptions.Mode := sslmClient;     // or sslmUnassigned ?
    SSL.SSLOptions.VerifyMode := [];
    SSL.SSLOptions.VerifyDepth := 0;
    DATA.From.Address := eUser.Text;       // 'my.name@pec.it'
    DATA.Recipients.EMailAddresses := eDest.Text; // 'recipient@pec.it'
    DATA.Subject := eOggetto.Text;         // 'dispatch of test'
    DATA.Body.Text := eCorpo.Lines.Text;   // ' Isend a mail from "pec" client to "ord" server)
    if (eAlleg.Text <> '') and FileExists(eAlleg.Text) then
       TIdAttachmentFile.Create(DATA.MessageParts, eAlleg.Text); 
    SMTP.IOHandler := SSL;
    SMTP.UseTLS := utUseExplicitTLS;
    SMTP.Host := eHost.Text;               // 'imaps.pec.aruba.it';
    SMTP.Port := StrToInt(ePorta.Text);    // 993 ;
    SMTP.Username := eUser.Text;           // 'my.name@pec.it'
    SMTP.Password := ePassw.Text;          // 'my_password_123'
    // SMTP.SASLMechanisms;                // no
    try
      try
        SMTP.Connect;
        SMTP.Send(DATA);
      except
        on E:Exception do
           ShowMessage('Non posso spedire E-Mail: ' + E.Message);
      end;
    finally
      if SMTP.Connected then SMTP.Disconnect;
    end;
  except
    on E : Exception do
    ShowMessage('Errore durante la spedizione del file: ' + E.Message);
  end;
end;

Я вставил «libeay32.dll» и «ssleay32.dll» в каталог \ Windows \ System32 (rel: openssl1.0.2q).

После щелчка кажется, что письмо отправлено, появляется кружок (screen.Hourglass), но любое последующее действие (loop?).Нет сообщения об ошибке.

Я считаю, что это проблема рукопожатия, некоторые свойства не переданы клиентом.TIdSSLIOHandlerSocketOpenSSL'setup является неполным?

Я признаю, что документация Indy слишком сложна и отнимает много времени, у меня нет правильных знаний, чтобы понять использование различных свойств.

Может ли кто-нибудь указать мне, почему программа не работает?

...