4

我的应用程序使用 Indy TiDSMTP 客户端组件发送电子邮件。然而,在某些情况下,客户无法或不愿意设置 SMTP 服务器和端口、用户名等,因此我想提供一种无需任何人设置任何东西即可发送电子邮件的解决方案。

我尝试了 TIDSMTPRelay 演示,但我需要明确输入 DNS 服务器 IP 地址(当我这样做时,它在“Project SMTPRelay.exe 引发异常类 EIdHostRequired 并带有消息''”时失败)。我希望有一个不需要用户输入任何设置的 Indy 解决方案——只要他们可以访问互联网,它就可以“开箱即用”。

我还需要提供什么?

TIA,R

4

1 回答 1

12

您必须直接将电子邮件发送到收件人邮件服务器。这需要执行 DNS 查找来检索每个收件人域的 MX 记录。Indy 的TIdSMTPRelay组件为您处理(通过在TIdDNSResolver内部使用该组件)。

没有平台中立的方式来查询机器的当前 DNS 配置。这需要特定于平台的 API。Indy 目前还没有任何东西可以实现自动化,尽管我认为这在未来版本中并不超出可能的范围。

您看到的异常是由TIdTCPClient.Connect(). 您不应该在使用时手动调用它TIdSMTPRelayHost在确定每个收件人域连接到哪个后,它会在内部调用。您需要自己做的就是设置DNSServer属性,可选地设置RelaySender属性,然后调用Send()方法。没有其他的。

于 2011-12-21T18:32:14.180 回答