Могу ли я прикрепить SSL-сертификаты моего сервера к компоненту TIdSMTPRelay при пересылке почты

Я хотел бы знать, если есть способ использовать мои сертификаты сервера при передаче почты с использованием TIdSMTPRelay компонент в indy, Вот так выглядит часть ретрансляции почты в моем коде:

procedure TMyForm.SMTPServerMsgReceive(ASender: TIdSMTPServerContext; AMsg : TStream; 
  var LAction: TIdDataReply);      
begin
  //The AMsg (TStream) is being transformed to MsgDecode (TIdMessage) and 
  // all relay recipients to RelayRecipients (TIdEMailAddressList) using     
  // [http://stackru.com/questions/8499524/using-indy-smtpserver]

  // SSLRelayHandler is a TIdSSLIOHandlerSocketOpenSsl indy component and SMTPRelay is 
  // a TIdSMTPRelay indy component 
  SMTPRelay.DNSServer := myDNSServer;
  SSLRelayHandler.SSLOptions.Method := sslvSSLv23; 
  SSLRelayHandler.SSLOptions.KeyFile := myMailServerKey;
  SSLRelayHandler.SSLOptions.CertFile := myMailServerCert;
  SSLRelayHandler.SSLOptions.RootCertFile := myMailServerRootCert;
  SMTPRelay.IOHandler := SSLRelayHandler;
  SMTPRelay.SSLOptions.SSLSupport := SupportSSL;
  try
    SMTPRelay.Send(MsgDecode, RelayRecipients); 
  except on e : Exception do 
  end;
end;

Иногда письмо никогда не отправляется, а иногда оно отправляется, но идет в раздел спама (Yahoo), хотя я выдаю STARTTLS команда благодаря приложенным TIdSSLIOHandlerSocketOpenSSL к моему TIdSMTPRelay, Могу ли я подключиться к другому почтовому серверу SMTPS порт 465 или TIdSMTPRelay компонент может отправлять только на порт 25? Для более подробной информации, как выглядит общение с Yahoo:

Stat Connected.
Recv 23.10.2014 ?. 15:32:15: 220 mta1418.mail.gq1.yahoo.com ESMTP ready<EOL>
Sent 23.10.2014 ?. 15:32:15: EHLO mail.mydomain.com<EOL>
Recv 23.10.2014 ?. 15:32:15: 250-mta1418.mail.gq1.yahoo.com<EOL>250-PIPELINING<EOL>250-SIZE      41943040<EOL>250-8BITMIME<EOL>250 STARTTLS<EOL>
Sent 23.10.2014 ?. 15:32:15: STARTTLS<EOL>
Recv 23.10.2014 ?. 15:32:15: 220 Start TLS<EOL>
Sent 23.10.2014 ?. 15:32:16: EHLO mail.mydomain.com<EOL>
Recv 23.10.2014 ?. 15:32:16: 250-mta1418.mail.gq1.yahoo.com<EOL>250-PIPELINING<EOL>250-SIZE 41943040<EOL>250 8BITMIME<EOL>
Sent 23.10.2014 ?. 15:32:16: MAIL FROM:<user229@mail.mydomain.com><EOL>
Recv 23.10.2014 ?. 15:32:16: 250 sender <user229@mail.mydomain.com> ok<EOL>
Sent 23.10.2014 ?. 15:32:16: RCPT TO:<test_user_mail@yahoo.com><EOL>
Recv 23.10.2014 ?. 15:32:16: 250 recipient <test_user_mail@yahoo.com> ok<EOL>
Sent 23.10.2014 ?. 15:32:16: DATA<EOL>
Recv 23.10.2014 ?. 15:32:17: 354 go ahead<EOL>
Sent 23.10.2014 ?. 15:32:17: From: "user229@mail.mydomain.com" <user229@mail.mydomain.com>   <EOL>Subject: =?UTF-8?B?0JfQsNCz0LvQsNCy0LjQtTIy?=<EOL>To: test_user_mail@yahoo.com<EOL>Date: Thu, 23     Oct 2014 15:32:17 +0300<EOL>
Sent 23.10.2014 ?. 15:32:17: <EOL>
Sent 23.10.2014 ?. 15:32:17: body of the mail here<EOL>
Sent 23.10.2014 ?. 15:32:17: <EOL>
Sent 23.10.2014 ?. 15:32:17: .<EOL>
Recv 23.10.2014 ?. 15:32:18: 250 ok dirdel<EOL>
Sent 23.10.2014 ?. 15:32:18: QUIT<EOL>
Recv 23.10.2014 ?. 15:32:18: 221 mta1418.mail.gq1.yahoo.com<EOL>
Stat Disconnected.

1 ответ

TIdSMTPRelay Можно использовать другие порты. Вы должны покинуть Port свойство установлено в значение по умолчанию (25), чтобы оно могло переключаться между 25 и 465 в зависимости от того, как он управляет своими соединениями SSL/TLS внутри.

SSLOptions свойство контролирует, как TIdSMTPRelay управляет своими соединениями SSL/TLS. SSLOptions.SSLSupport можно установить на NoSSL, SupportSSL, или же RequireSSL, а также SSLOptions.TryImplicitTLS может быть установлен в True или False. Смотрите реализацию в TIdSMTPRelay.Connect(),

когда SSLOptions.TryImplicitTLS верно (порт 465), Send() будет пытаться использовать UseTLS=utImplicitTLS при подключении. Это означает, что рукопожатие SSL/TLS будет инициировано, как только сокет будет подключен.

Если это не удается, или если SSLOptions.TryImplicitTLS ложно (порты 25 и 587), Send() буду использовать UseTLS=utNoTLSSupport, UseTLS=utUseExplicitTLS, или же UseTLS= utUseRequireTLS в зависимости от стоимости SSLOptions.SSLSupport:

NoSSL: сеанс SMTP будет незашифрованным.

SupportSSL: сеанс SMTP будет инициирован в незашифрованном виде, затем STARTTLS будет отправлен на SMTP-сервер, только если поддерживается, в противном случае сеанс SMTP будет продолжаться в незашифрованном виде. В случае сбоя рукопожатия SSL/TLS будет сгенерировано исключение.

RequireSSL: сеанс SMTP будет инициирован в незашифрованном виде, затем STARTTLS будет отправлено на SMTP-сервер, если поддерживается, в противном случае сеанс SMTP будет закрыт с повышением исключения. В случае сбоя рукопожатия SSL/TLS будет сгенерировано исключение.

Другие вопросы по тегам