1

我有一个 Delphi 应用程序,它使用 Indy IdSMTP 对象向智能主机发送电子邮件。

我想使用带有 SMTP 接口的 Amazon SES 服务。根据http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html,我需要使用 TLS 连接。

我不确定应该为 IdSMTP 对象 UseTLS 属性使用哪个值,然后在 IOHandler 中指定什么值。

有没有在 Delphi 中使用 Amazon SES 的简单方法?现在我希望能够只发送文本电子邮件,但将来我可能需要发送 HTML 电子邮件。

4

1 回答 1

6

在连接到服务器之前,您需要为该属性分配一个启用 SSL 的TIdIOHandler组件,例如TIdSSLIOHandlerSocketOpenSSLTIdSMTP.IOHandler并将该TIdSMTP.UseEHLO属性设置为 True。然后,您有两种选择来配置 TLS 设置:

  1. TIdSMTP.UseTLS属性设置为utUseExplicitTLS,然后将TIdSMTP.Port属性设置为 25、587 或 2587(SES 上的所有三个端口都支持utUseExplicitTLS)。

  2. TIdSMTP.UseTLS属性设置为utUseImplicitTLS,然后将TIdSMTP.Port属性设置为 465 或 2465(SES 上的两个端口都支持utUseImplicitTLS)。

这些UseTLS值之间的区别在于,utUseExplicitTLS它将连接到最初未加密的服务器,然后在需要时向服务器发送 SMTPSTARTTLS命令以启用加密,而utUseImplicitTLS将连接到服务器并在任何与 SMTP 相关的数据可以交换之前立即启用加密。

亚马逊建议验证服务器的 TLS 证书以验证连接的完整性。您可以在属性中启用sslvrfPeersslvrfFailIfNoPeerCert标志TIdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode,然后TIdSSLIOHandlerSocketOpenSSL.OnVerifyPeer根据需要使用该事件来验证证书详细信息。

于 2013-03-13T18:10:39.230 回答