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

时间:2010-04-13 14:14:12

标签: c# email timezone

有人可以推荐一种方法来确定从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)

有一些“已收到:来自”和“已收到:已”键,最后显示日期,时间和时区。

我应该尝试解析哪一项? 这是一个可靠的方法来确定发件人的时区,还是有人推荐更好的方式?

2 个答案:

答案 0 :(得分:3)

理论上,Received字段的时间戳是准确的。这是文档:

  

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

唯一的问题是这部分:

  

实际上,SMTP服务器会将各种格式错误的信息放入已接收的行中。 读者可能最好在最终分号之前将所有内容视为非结构化文本,纯粹供人类使用。

答案 1 :(得分:3)

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

邮件的撰写日期由“日期”标题表示,该标题应该是唯一的。

因此,根据您想要做的事情,您应该采用最后的“收到”标题(应该是根据第一个SMTP服务器发送邮件的日期)或“日期”标题(应该是用户按下“新邮件”或“回复”按钮并包含客户时区的时间 - 假设您正在处理真实客户端而不是网络邮件。)

如果您正在处理网络邮件,那么时区的内容可能是真实的,从真正的原始用户TZ到网络服务器设置的默认值。