【问题标题】:sending mail but no message-id发送邮件但没有 message-id
【发布时间】:2010-12-21 06:38:07
【问题描述】:

当我发送一封带有 indy-10 的 tidMessage 组件的邮件时,我收到了来自我的客户邮件服务器的有趣拒绝:

550 被拒绝:消息不包含消息 ID

即使使用 indy 自己的演示应用程序我也能做到这一点

http://www.indyproject.org/DemoDownloads/Indy_10_MailClient.zip

我该怎么做才能解决这个问题。谢谢!

【问题讨论】:

  • 它们不符合 RFC2822:(3.6.4) "虽然 可选,但每条消息都应该有一个 "Message-ID:" 字段"
  • 另外,您是否使用 idSMTP 组件直接向邮件服务器发送邮件? AFAIK 大多数 MTA 自己添加一个消息 ID,与 SMTP 客户端相比,更容易确保其唯一性。

标签: delphi indy indy10


【解决方案1】:

它适用于 Indy9,也许事情在 10 年内变化不大:

    procedure AddMsgID(AMsg: TIdMessage);
    var
      id: AnsiString;
    begin
      id := GenerateUniqueMsgID;
      AMsg.MsgId := id;
      AMsg.AddHeader('Message-ID=' + id);
      // AMsg.ExtraHeaders.Values['Message-ID'] := id;
    end; // AddMsgID

【讨论】:

  • 您不需要同时使用 AddHeader() 和 ExtraHeaders。使用其中之一,而不是两者。
  • 好的。评论ExtraHeaders out.
【解决方案2】:

Indy 10 中的 TIdMessage 在将电子邮件编码到套接字或 TStream 时有意省略了“Message-Id”标头。您将不得不使用 TIdMessage.ExtraHeaders 属性,例如:

IdMessage1.MsgId := ...';
IdMessage.ExtraHeaders.Values['Message-Id'] := IdMessage1.MsgId;

编辑:

作为对此的跟进 - TIdMessage 现在已经更新了它如何处理“Message-ID”和“In-Reply-To”标头的逻辑更改:

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

TIdMessage.MsgId 属性现在会生成一个“Message-ID”标头,无论电子邮件是被保存、流式传输还是传输。所以你不再需要使用ExtraHeaders 属性了。

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 2011-07-30
    • 2013-01-07
    • 2014-02-14
    • 2011-10-16
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多