使用Delphi中的Indy 10.6.2.5341进行SMTP隐式TLS和显式TLS

时间:2017-09-14 05:11:51

标签: delphi indy

这里有点奇怪,设置" UseTLS"要utUseExplicitTLS然后连接到其Implicit TLS端口上的邮件服务器,第一次尝试允许连接并发送电子邮件,该端口上的后续尝试正确失败。

只是想知道是否有人对如何避免初始连接和发送的误报有任何想法。

检查是为了处理非标准端口可能被用于用户的邮件服务器。几乎所有我见过的例子都假设将始终提供正确的信息。

以下是处理它的代码部分(不包括错误记录):

function SendTestEmail(EmailAddress: String): Boolean;
var
  EmailMessage: TidMessage;
begin
  IdSMTPEmail.AuthType := satDefault
  IdSMTPEmail.Username := ...;
  IdSMTPEmail.Password := ...;
  IdSMTPEmail.Port := 465;

  IdSMTPEmail.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdSMTPEmail);
  IdSMTPEmail.UseTLS := utUseExplicitTLS;
  TIdSSLIOHandlerSocketOpenSSL(IdSMTPEmail.IOHandler).SSLOptions.Method := sslvTLSv1_2;
  try
    // Connect
    IdSMTPEmail.Connect('smtp.gmail.com');

    try
      // Create
      EmailMessage := TidMessage.Create(nil);

      try
        // Set values
        EmailMessage.Body.Add('Test Email');
        EmailMessage.Subject := 'Test Email';

        // Set sender details
        EmailMessage.From.Address := 'test@test.com';
        EmailMessage.From.Name := 'SSL Test';

        // Set recipient
        EmailMessage.Recipients.Add.Address := EmailAddress;

        try
          // Send message
          IdSMTPEmail.Send(EmailMessage);

        except
          // Exception
          on E: EIdSMTPReplyError do
          begin
            // Result
            Result := False;
          end;
        end;

      finally
        // Free email
        EmailMessage.Free;
      end;

    finally
      // Disconnect
      IdSMTPEmail.Disconnect;
    end;

  except
    // Exception
    on E: Exception do
    begin
      IdSMTPEmail.Disconnect;
      // Result
      Result := False;
    end;
  end;
end;

1 个答案:

答案 0 :(得分:0)

使用以下代码,尝试通过电子邮件发送到端口465的所有尝试都正确失败。

我甚至没有假装理解为什么这样有效但我原来没有。

php -r "echo urldecode('{ABOVE URL}');"