【问题标题】:Can I attach my server SSL certificates to the TIdSMTPRelay component when relaying mail我可以在中继邮件时将我的服务器 SSL 证书附加到 TIdSMTPRelay 组件吗
【发布时间】:2014-12-19 04:16:08
【问题描述】:

我想知道在使用indy 中的TIdSMTPRelay 组件中继邮件时是否可以使用我的服务器证书。这就是我的代码中邮件中继部分的样子:

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://stackoverflow.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;

有时邮件永远不会发送,有时它会发送到垃圾邮件部分(雅虎),尽管我发出了一个STARTTLS 命令,这要感谢附加的TIdSSLIOHandlerSocketOpenSSL 到我的TIdSMTPRelay。我可以连接到另一个邮件服务器的SMTPS 端口465TIdSMTPRelay 组件只能发送到端口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.

【问题讨论】:

    标签: delphi ssl smtp indy smtps


    【解决方案1】:

    TIdSMTPRelay 可以使用其他端口。您应该将 Port 属性设置为其默认值 (25),以便它可以根据内部管理其 SSL/TLS 连接的方式在 25 和 465 之间切换。

    SSLOptions 属性控制TIdSMTPRelay 如何管理其 SSL/TLS 连接。 SSLOptions.SSLSupport 可以设置为NoSSLSupportSSLRequireSSLSSLOptions.TryImplicitTLS 可以设置为 True 或 False。请参阅TIdSMTPRelay.Connect() 中的实现。

    SSLOptions.TryImplicitTLS 为真(端口465)时,Send() 将在连接时尝试使用UseTLS=utImplicitTLS。这意味着一旦套接字连接,就会启动 SSL/TLS 握手。

    如果失败,或者SSLOptions.TryImplicitTLS 为假(端口 25 和 587),Send() 将使用 UseTLS=utNoTLSSupportUseTLS=utUseExplicitTLSUseTLS= utUseRequireTLS,具体取决于 SSLOptions.SSLSupport 的值:

    NoSSL: SMTP 会话将不加密。

    SupportSSL:SMTP 会话将在未加密的情况下启动,然后STARTTLS 将仅在支持的情况下发送到 SMTP 服务器,否则 SMTP 会话将继续未加密。如果 SSL/TLS 握手失败,则会引发异常。

    RequireSSL:SMTP 会话将在未加密的情况下启动,然后STARTTLS 将被发送到 SMTP 服务器(如果支持),否则 SMTP 会话将关闭并引发异常。如果 SSL/TLS 握手失败,则会引发异常。

    【讨论】:

    • 非常感谢您的详细解释 - 我仍然不明白如何将服务器证书附加(如果可能的话)TIdSMTPRelay - 我的方式是否正确。有没有办法测试其他邮件服务器(例如雅虎)是否可以验证我的 ssl 证书 - 当我尝试 SMTPRelay.SSLOptions.TryImplicitTLS := True; 时,它返回了我 Connection timed out 雅虎和 gmail 的错误 - 他们不应该支持吗SMTPS ?
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2017-06-08
    • 2016-05-05
    • 2013-09-16
    • 2019-03-16
    • 2012-10-26
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多