TIdMessage标头和消息

时间:2015-08-03 17:04:45

标签: delphi delphi-2007 indy10

使用Indy 10.1.5(D2007附带的版本),我正在撰写并发送电子邮件作为自动内部流程的一部分。

电子邮件已正常发送,但当收件人收到邮件时,电子邮件客户端中的时间显示不正确,导致邮件在收件箱中错误排序。这导致收件人忽略了该消息(因为它没有以正确的顺序出现在收件箱中并从底部滚动),导致处理延迟。

美国东部时区的发件人和收件人(UTC -0400)。邮件标题正确显示邮件日期,但未包含时区:

  

日期:星期一,2015年8月3日11:12:21 +0000

在Outlook中收到并查看电子邮件时,将显示带有UTC偏移的消息:

  

星期一08/03/2015 7:12 AM

创建消息的代码非常简单(复制/粘贴,然后匿名和简化)。它创建一个相对较短的消息体(提供有关附加文件的信息),创建附件并发送消息。 (try..excepttry..finally为了简洁而删除了 - 它们存在于实际代码中。)

Msg := TIdMessage.Create;
// Also tried using False and setting Date property manually
Msg.UseNowForDate := True;   
for i := 0 to NumAddr do     // Number of recipients
begin
  Msg.Recipients.Add;
  Msg.Recipients[Msg.Recipients.Count - 1] := RecipAddr[i];
end;
Msg.FromList.Add;
Msg.FromList[0].Name := Sender Name;
Msg.FromList[0].Address := SenderAddress;
Msg.Subject := 'Some text';
Msg.Body.Add('A few lines of text providing summary info.');
TIdAttachmentFile.Create(Msg.MessageParts, FileToAttach);

Mail := TIdSMTP.Create;
Mail.Host := PrimaryMailServer;
Mail.Connect;
Mail.Send(Msg);
Mail.Disconnect;

我已经阅读了Indy文档并检查了我可以为TIdSMTPTIdMessage找到的所有属性,并且找不到任何可以纠正此时区不匹配的内容。< / p>

任何人都能看到我在这里失踪的是什么吗?

1 个答案:

答案 0 :(得分:2)

10.1.5是Indy 10的过时版本。当前版本是10.6.2。

早期版本的Indy 10中存在一些与UTC相关的错误。在这种情况下,Indy的OffsetFromUTC()函数中存在一个错误,它检索本地机器的UTC偏移量,并且在计算外发电子邮件的时间戳时使用。您应升级到Indy 10的现代版本,以便获得最新的修复,功能,架构更改等。

如果您无法升级,则必须将TIdMessage.UseNowForDate属性设置为false,并在TDateTime属性中提供您自己的时区调整后的TIdMessage.Date值,以说明Indy&#39; s错误的偏移量,因此发送了一个合适的时间戳值。