2013-03-13 165 views
0

我有一个Delphi应用程序使用Indy IdSMTP对象将电子邮件发送到智能主机。如何在Delphi中使用SMTP亚马逊SES?

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

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

在Delphi中使用Amazon SES有直接的方法吗?目前我希望能够仅发送文本电子邮件,但将来我可能需要发送HTML电子邮件。

回答

6

之前连接到服务器,您需要分配启用SSL的TIdIOHandler成分,如TIdSSLIOHandlerSocketOpenSSL,到TIdSMTP.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将连接到服务器最初未加密然后发送SMTP STARTTLS命令给服务器以在需要时启用加密,而utUseImplicitTLS将连接到服务器并立即启用加密然后可以交换任何与SMTP相关的数据。

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