为什么 IdSMTP.Send 如果只有一个电子邮件地址不正确,就会失败?



我正在使用Indy和Delphi发送电子邮件。 直到最近其中一个用户被解雇,我才遇到任何问题。 他们的电子邮件帐户被删除,我的程序试图向包括"缩小"用户在内的七个用户发送电子邮件。 我希望SMTP服务器接受电子邮件并将邮件传递给有效用户,然后将电子邮件发送回发件人,通知他们收件人列表中的一个帐户不再有效。

相反,SMTP服务器不接受任何东西,也没有人收到邮件。 我的日志中出现"邮箱不可用"。 是否有设置可以更改此行为? 像Outlook这样的电子邮件客户端当然不会以这种方式运行。

具体来说,发送邮件的正确技术是什么,以便收件人列表中的所有有效电子邮件地址都得到传递,并且SMTP服务器通知发件人任何不正确的地址?

提前谢谢。

如果您使用的是 Indy 10,则需要为TIdSMTP.OnFailedRecipient事件分配一个处理程序,并将其VContinue参数设置为 True。

procedure TForm1.IdSMTP1FailedRecipient(Sender: TObject; const AAddress, ACode,
AText: string; var VContinue: Boolean);
begin
// do something...
VContinue := True;
end;

这将允许TIdSMTP跳过失败的收件人并继续向其余收件人发送电子邮件。 仅当所有收件人都失败时,才会TIdSMTP发送失败(当然,除非发生其他非收件人错误)。

如果您使用的是 Indy 9 或更早版本,或者未提供OnFailedRecipient处理程序,则TIdSMTP将失败并在遇到第一个错误(包括收件人错误)时中止发送。

如果 SMTP 服务器在发件人仍向服务器发送电子邮件的过程中主动拒绝给定收件人,则不会向发件人的收件箱发送通知。 您必须使用OnFailedRecipient事件对该收件人执行操作。 只有被服务器接受但后来发现有误的收件人才会相应地向发件人的收件箱发送通知。 这就是SMTP的工作方式。

相关内容

最新更新