使用Indy发送邮件而不使用外部服务器

时间:2011-12-21 18:10:10

标签: delphi smtp indy10

我的应用使用Indy TiDSMTP客户端组件发送电子邮件。但是,在某些情况下,客户无法或不愿意设置SMTP服务器和端口,用户名等,因此我希望提供一种发送电子邮件的解决方案,而无需任何人设置任何内容。

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

我还需要提供什么?

TIA, [R

1 个答案:

答案 0 :(得分:10)

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

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

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