我有一个Delphi应用程序,使用Indy IdSMTP对象向智能主机发送电子邮件。
我想使用Amazon SES服务,带有SMTP接口。根据http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html,我需要使用TLS连接。我不确定我应该为IdSMTP对象UseTLS属性使用哪个值,然后应该在IOHandler中指定什么。
是否有一个直接的方法来使用亚马逊SES在Delphi?现在我想能够只发送文本电子邮件消息,但在未来我可能需要发送HTML电子邮件消息。
在连接服务器前,需要将已启用ssl的TIdIOHandler
组件(如TIdSSLIOHandlerSocketOpenSSL
)设置为TIdSMTP.IOHandler
属性,并将TIdSMTP.UseEHLO
属性设置为True。然后,您有两种选择来配置TLS设置:
-
设置
TIdSMTP.UseTLS
属性为utUseExplicitTLS
,然后设置TIdSMTP.Port
属性为25,587或2587 (SES上所有三个端口都支持utUseExplicitTLS
)。 -
设置
TIdSMTP.UseTLS
属性为utUseImplicitTLS
,然后设置TIdSMTP.Port
属性为465或2465 (SES的两个端口都支持utUseImplicitTLS
)。
UseTLS
值之间的区别在于utUseExplicitTLS
将最初未加密地连接到服务器,然后在需要时向服务器发送SMTP STARTTLS
命令以启用加密,而utUseImplicitTLS
将在任何与SMTP相关的数据可以交换之前立即连接到服务器并启用加密。
Amazon建议验证服务器的TLS证书以验证连接的完整性。您可以在TIdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode
属性中启用sslvrfPeer
和sslvrfFailIfNoPeerCert
标志,然后根据需要使用TIdSSLIOHandlerSocketOpenSSL.OnVerifyPeer
事件验证证书详细信息。