如何避免"消息被拒绝,没有消息ID"当使用Indy smtp时

时间:2014-07-10 14:55:10

标签: smtp delphi-xe5 indy10

在极少数情况下,我的电子邮件会反弹并显示以下消息:

远程主机说:550-RFC2822说所有邮件都应该有一个Message-ID标头。 550大多数没有它的邮件都是垃圾邮件,因此您的邮件已被拒绝。

我已尝试使用以下方式设置message-id标头:

IdMessage1.Headers.Values['Message-ID'] := id;

在这种情况下,id是mydomain中xxxxx格式的字符串。然而,要么不是如何设置消息ID标头,要么它被我的smtp服务器剥离(由我的isp托管)我已经注​​意到从Outlook发送的电子邮件确实得到了message-id并且它们没有被删除。有没有人对如何提供message-id标题有任何建议,所以它不会被剥离?我还应该包含其他标题吗?我也通过电子邮件发送了我的isp,以防它们的设置结束,但Outlook必须以某种方式进行。

1 个答案:

答案 0 :(得分:3)

要在发送保存电子邮件时提供自定义标头,您必须使用TIdMessage.ExtraHeaders属性。 接收加载电子邮件时使用TIdMessage.Headers属性。

TIdMessage有一个MsgId属性,您可以使用它。但是,当发送电子邮件时,MsgId属性值将被忽略,因此您必须求助TIdMessage.ExtraHeaders发送自定义Message-ID标头。但是,保存电子邮件时,TIdMessage.MsgId值不会被忽略。


修改

作为对此的后续行动 - TIdMessage现已更新,其逻辑更改如何处理" Message-ID"和" In-Reply-To"头:

http://indyproject.org/sockets/blogs/changelog/20160912.aspx

简而言之,TIdMessage.MsgId属性现在生成一个" Message-ID"创建新电子邮件时的标题(您不再需要使用TIdMessage.ExtraHeaders属性,但如果需要,仍然可以使用),以及" In-Reply-To"标题不再使用当前"消息ID"自动生成TIdMessage.InReplyTo属性为空时的标题。