gpt4 book ai didi

email - 检查是否发送了电子邮件——Delphi Indy10

转载 作者:行者123 更新时间:2023-12-03 18:30:04 28 4
gpt4 key购买 nike

我的应用程序将电子邮件发送到给定的地址,这工作正常。问题是,这些电子邮件地址之一可能不正确且不存在。我正在使用 Delphi 2009 和 Indy10 组件(TIdSMTP 和 TIdMessage)。

Try
Try
SMTP.Connect;
SMTP.Send(MailMessage);
resultTmp := ?????
Except
on E : Exception do begin
ShowMessage(E.Message);
end;
End;
Finally
if SMTP.Connected then begin
SMTP.Disconnect;
end;
End

如何检查电子邮件是否已发送?在我的测试 Gmail 帐户中,如果我尝试将电子邮件发送到不正确的地址,我会收到类似“找不到地址”的电子邮件。

谢谢

最佳答案

当您向 SMTP 服务器发送电子邮件时,您真正要做的就是将电子邮件发送给服务器,然后它会报告是否会尝试将其发送给指定的收件人。不保证交货。

如果给定收件人是该服务器/域的本地收件人,则接收 SMTP 服务器可以立即报告(作为对 SMTP RCPT TO 命令的回复)它是否会将电子邮件发送给该收件人。 TIdSMTP可以通过 TIdSMTP.OnFailedRecipient 向您的代码报告此类错误事件,或引发异常。

但是,如果电子邮件无法立即发送给收件人,则必须异步发送,通常通过中继到另一台服务器(可能多次),并且直到您将电子邮件发送给初始服务器之后才会发生发送并继续前进。

因此,TIdSMTP 无法报告在该交付期间发生的错误。 .未能传递电子邮件的 SMTP 服务器(可能是您连接到的同一台服务器,或者可能是电子邮件中继到的另一台服务器)将向原始发件人的收件箱发送一封电子邮件,说明发生的错误.

因此,要检测此类错误,您必须定期检查收件箱,例如使用 POP3 或 IMAP,然后解析电子邮件以获取详细信息。并且此类错误可能需要一些时间才能到达,具体取决于错误的性质、给定服务器在放弃之前重试的时间等。因此,可能需要几分钟、几小时甚至几天才能得到回复,如果有的话。

通常,没有单一可靠的方法可以及时了解给定收件人是否有效。您应该让 SMTP 完成其工作并异步处理错误。

但是,如果您必须验证,一种方法是使用 TIdDNSResolver查找收件人域的 MX 记录,然后连接 TIdSMTP到该域服务器并调用 TIdSMTP.Verify()检查收件人是否存在于这些服务器上。但这需要服务器实现 SMTP VRFY命令,该命令是 SMTP 协议(protocol)规范的可选命令,现代服务器可能无法实现,以避免泄漏知识,并填补漏洞漏洞。

关于email - 检查是否发送了电子邮件——Delphi Indy10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46976173/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com