ical4j发送会议日历时差问题

在公司开发和维护邮件发送相关api及web,有客户反映通过我们平台发送出去的会议日历部分邮件客户端如outlook打开的时候存在时区差的问题,有的存在8个小时是去查的问题,有的存在1个小时(也就是所谓夏令时的问题,这个是历史遗留问题,相关描述大家可以自行某度),公司开发语言为java,发送会议日历相关采用第三方jar包ical4j,版本为1.0.5.2(版本可能有点落后)。出现时区问题之后上某度和Google搜索,相关信息很少,而且都没有好的回答,后来通过查看ical4j源码包中的相关日历文件,如下图所示


,发现源码包中的shanghai.ics就存在问题,于是就想办法修改shanghai.ics源码,但是苦于找不到正确的shanghai.ics文件,只能不停的给自己发测试邮件,通过Foxmail查看日历邮件源码,发现有一行关键代码:TZURL:http://tzurl.org/zoneinfo/Asia/Shanghai,后来通过在浏览器中输入http://tzurl.org/zoneinfo/Asia/Shanghai,并一级一级回退到上次目录,定位在http://tzurl.org/时候如下图所示:


点进去zoneinfo-outlook发现和zoneinfo目录下面一样有很多日历文件,并且看zoneinfo-outlook名字和后面的英文注释应该是兼容outlook的,于是点进去zoneinfo-outlook目录后下载Shanghai.ics和原来的Shanghai.ics文件对比,发现zoneinfo-outlook中的Shanghai.ics中采用的是通用的CST+8的时区设置,于是将zoneinfo-outlook中的Shanghai.ics替换源码中的Shanghai.ics文件,测试发送夏令时问题得以解决


后面还遇到过网易闪电邮客户端打开时区差8个小时的问题,其他客户端都正常的情况,通过不断测试发送发现在代码加入两行代码,如下所示


问题也得到解决。


总结:smtp协议是一个开放的协议,各个邮件客户端比如outlook、foxmail等在接到邮件的时候在解析的时候可能会略有不同,导致测试的时候总是有的客户端有问题,有的客户端没有问题这种蛋疼的问题,但是通过仔细分析邮件原文,还是能发现一些问题,并解决。后面我还会谈到同样关于会议日历发送的另外一个问题,如果取消和修改已经发送出去的会议日历

你可能感兴趣的:(邮件)