大家知道,jwSMTP是一个简单易用的发送Email的开源C++库。笔者在系统业务中存在发送报警邮件的需求,
系统是python语言开发的,于是使用了这个库并将其包装成python接口(python内置的发邮件模块容易存在编码问题,不方便控制)
感觉不错,简单快捷稳定,编码一切正常,可是经过实测发现所有发送的邮件的“发送时间”都与实际时间存在几个小时的偏差,而且偏差是固定。
几番痛苦折腾无果,最后查看邮件SMTP协议相关的技术文档,有这么一段话:
恍然大悟,于是用单步调试模式跟踪jwSMTP发送代码的代码,最后在如下这个地方找到了问题的答案:
在源代码mailer.cpp文件中发送时间戳字符串那地方的结尾加上" +0800" 就正常了!
可见我们在引入国外一些优秀的开源项目时应多注意“编码”和“时区”这类很容易出现的问题,做好“本地化”工作。