我目前正在开发一个程序,将邮箱文件从旧的基于 tenex 的邮件格式转换为 mbox。tenex 邮箱格式具有与 mbox 格式类似的分隔线(后者称为 From_ 行),
特内克斯:
7-Feb-86 21:41:21-EST,1925;000000000000
邮箱:
From [email protected] Fri Feb 07 14:20:00 1986
但由于缺乏文档,“tenex 格式”文件的分隔行中的日期时间戳记的来源是模糊的。
因此,在将消息从 tenex 转换为 mbox 格式时,我使用日期标头字段中的日期时间戳来构造 mbox 格式消息的 From_ 行,而不是 tenex 格式文件的分隔符行中的行。
但RFC4155,试图描述“the”mbox 格式(实际上有几种不同的格式)并为该文件格式提供一种标准,其中指出:
每条消息都以分隔符行开始,该分隔符行标识消息发送者,并且还标识最终接收者(传输路径中的最后一跳系统,或者充当接收者的系统)接收该消息的日期和时间。邮局)。
因此,我怀疑我使用日期标头字段中的日期时间戳的方法是否正确。
但是,如果没有传输信封,我可以从哪里获得接收邮件的最终收件人的实际日期时间戳记?这是“已接收”标头字段的最后一个条目中的日期时间戳记吗?
答案1
“From_”行由程序写入mail.local
(最初mail
在第七版 Unix 中称为),时间戳是消息写入邮箱的实际时间。
IE ”最终收件人收到邮件的日期和时间”实际上是邮件被写入收件人邮箱文件的时间,这正是最终收件人“收到”邮件的时间。
在消息内容之前将初始分隔行写入“mbox”文件中的代码非常字面意思:
time(&tval);
fprintf(fp, "From %s %s", from, ctime(&tval));
因此,如果 TENEX 邮箱中分隔符行中的时间戳也是“收到”时间(这就是松木技术说明说一下: 标头中的时间是将邮件写入文件夹的时间。),那么你只需要重新格式化它。这些时间戳具有完全相同的含义。
答案2
在哪里可以获得接收邮件的最终收件人的实际日期时间戳?这是“已接收”标头字段的最后一个条目中的日期时间戳记吗?
在典型的 MTA 传送情况下,前导 From 行(不带冒号)是传送时间戳。如果您没有,那么还有一些其他选择需要考虑。它可能由接收 MTA 记录在信封标头中(我不记得确切的细节)。或者,如果您信任“已接收”标头字段,它应该是最上面(第一个)的标头字段。如果日期字段失败,则应该给出合理的近似值,除非您预计邮件传送速度会非常慢,例如通过拨号的 UUCP。