如何避免;消息被拒绝,没有消息id“;使用Indy smtp时

如何避免;消息被拒绝,没有消息id“;使用Indy smtp时,smtp,delphi-xe5,indy10,Smtp,Delphi Xe5,Indy10,在极少数情况下,我的电子邮件会回复信息: 远程主机说:550-RFC2822说所有邮件都应该有一个消息ID头。 550大多数没有它的邮件都是垃圾邮件,因此您的邮件已被拒绝 我已尝试使用以下方法设置邮件id标头: IdMessage1.Headers.Values['Message-ID'] := id; 在本例中,id是mydomain中格式为xxxxx的字符串。然而,要么这不是设置邮件id头的方法,要么它被我的smtp服务器(由我的isp托管)剥离。我注意到,从Outlook发送的电子邮件确

在极少数情况下,我的电子邮件会回复信息:

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

我已尝试使用以下方法设置邮件id标头:

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

在本例中,id是mydomain中格式为xxxxx的字符串。然而,要么这不是设置邮件id头的方法,要么它被我的smtp服务器(由我的isp托管)剥离。我注意到,从Outlook发送的电子邮件确实会获取邮件id,并且它们不会被剥离。有没有人对如何提供消息id头以使其不被剥离有任何建议?是否还有其他标题我也应该包括在内?我还向我的isp发送了电子邮件,以防这是他们的设置,但Outlook必须以某种方式进行设置。

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

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


编辑:

作为本节的后续内容-
TIdMessage
现已更新,其处理“邮件ID”和“回复”标题的逻辑更改如下:


简而言之,
TIdMessage.MsgId
属性现在在创建新电子邮件时生成一个“消息ID”标题(您不再需要使用
TIdMessage.ExtraHeaders
属性,但如果需要,您仍然可以使用该属性),并且“回复”标题不再使用当前的“消息ID”自动生成
TIdMessage.InReplyTo
属性为空时的标题。

Remy,谢谢您提供的信息。我现在已经使用额外的头设置了消息id,它似乎可以工作,但是我也得到了回复:设置为相同的值。有没有办法避免这种情况,或者说这有什么意义?是的,我的意思是
MsgId
,对不起。我已经更新了我的答案。至于回复标题中的
,如果
TIdMessage.InReplyTo
属性为空,则它将设置为与
消息ID
标题相同的值。这是硬编码行为,无法避免
TIdMessage
的行为基于这样一种信念,即客户端永远不会生成自己的消息ID,这应该是服务器的责任。这一观点多年来一直受到质疑,但
TIdMessage
尚未相应更新。谢谢雷米,我的ISP说他们无法更改服务器的行为(似乎它不会自动设置消息id)。您认为在回复标头时添加额外的消息会导致问题吗?我想我也可以尝试修改indy代码(尽管我从未看过它)。我修改了我的indy版本,使其不针对我的情况进行设置。谢谢你的帮助!