代码之家  ›  专栏  ›  技术社区  ›  John Sibly

如何确定从c中发送电子邮件的时区#

  •  3
  • John Sibly  · 技术社区  · 14 年前

    有谁能推荐一种方法来确定一封电子邮件是从C_发送的时区吗?

    查看电子邮件的标题信息包括以下信息:

    Received: from mail-ew0-f211.google.com (123.85.219.211) by UKExchange
     (10.1.10.99) with Microsoft SMTP Server id 1.2.345.6; Tue, 13 Apr 2010
     14:26:24 +0100
    Received: by ewy3 with SMTP id 3so288857ewy.6        for
     <john.sibly@mycompany.com>; Tue, 13 Apr 2010 06:26:23 -0700 (PDT)
    MIME-Version: 1.0
    Received: by 10.103.213.2 with HTTP; Tue, 13 Apr 2010 06:26:23 -0700 (PDT)
    X-Originating-IP: [83.244.243.210]
    Date: Tue, 13 Apr 2010 14:26:23 +0100
    Received: by 10.103.3.17 with SMTP id f17mr3087878mui.123.1271165183473; Tue,
    13 Apr 2010 06:26:23 -0700 (PDT)
    

    有许多“Received:From”和“Received:By”键,在末尾显示日期、时间和时区。

    我应该尝试解析其中的哪一个? 这是一种确定发送者时区的可靠方法,还是有人推荐一种更好的方法?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Stephane    14 年前

    各种“已接收”条目是每个后续服务器按相反顺序接收电子邮件的时间(即,最后一个接收邮件的服务器位于堆栈顶部)。但是,这不是消息发送的日期,而是服务器接收消息的日期。

    消息的合成日期由“日期”标题指示,该标题应是唯一的。

    因此,根据您要做的具体操作,您应该选择最后一个“Received”头(应该是根据第一个SMTP服务器发送邮件的日期)或“Date”头(应该是用户按下“New Mail”或“Reply”按钮并包含我的客户区-假设你正在处理一个真正的客户,而不是网络邮件)。

    如果您处理的是web邮件,那么时区的内容可以是任何真正的内容,从真正的原始用户tz到web服务器设置的任何默认值。

        2
  •  3
  •   Keltex    14 年前

    理论上,接收字段上的时间戳是准确的。文件如下:

    http://cr.yp.to/immhf/date.html#timestamp

    唯一的问题是这部分:

    实际上,smtp服务器将各种格式错误的信息放入接收的行中。 读者最好把最后分号之前的所有内容都当作非结构化文本,纯粹是为了供人使用。