有人可以推荐一种方法来确定从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)
有一些“已收到:来自”和“已收到:已”键,最后显示日期,时间和时区。
我应该尝试解析哪一项? 这是一个可靠的方法来确定发件人的时区,还是有人推荐更好的方式?
答案 0 :(得分:3)
理论上,Received字段的时间戳是准确的。这是文档:
唯一的问题是这部分:
实际上,SMTP服务器会将各种格式错误的信息放入已接收的行中。 读者可能最好在最终分号之前将所有内容视为非结构化文本,纯粹供人类使用。
答案 1 :(得分:3)
各种“已接收”条目是每个连续服务器以相反顺序接收电子邮件的时间(即,接收邮件的最后一个服务器位于堆栈顶部)。但是,这不是邮件发送的日期,而是服务器收到邮件的日期。
邮件的撰写日期由“日期”标题表示,该标题应该是唯一的。
因此,根据您想要做的事情,您应该采用最后的“收到”标题(应该是根据第一个SMTP服务器发送邮件的日期)或“日期”标题(应该是用户按下“新邮件”或“回复”按钮并包含客户时区的时间 - 假设您正在处理真实客户端而不是网络邮件。)
如果您正在处理网络邮件,那么时区的内容可能是真实的,从真正的原始用户TZ到网络服务器设置的默认值。