lbcmail 2019-06-26
业务需求,需要开发"发送Threads邮件"的功能
上司只提及一个关键词: Thread, 对应的中文是 话题. 他也不知道这个是怎么实现的.
我用QQ邮箱做了测试,发现QQ邮箱是使用标题作为话题跟踪的线索,所以用原有的方法发送一封邮件,也可以实现话题跟踪的功能,这个与我的目标不符.
后来,在网上搜了很久,终于发现了这篇文章:
How to Merge Threads in Mozilla Thunderbird — The Advanced Way
里面介绍了会话跟踪的原理: Message-ID 和 References
假设我发送了A邮件,A邮件会有独特的Message-ID, 后来发送的B邮件如果要与A形成会话, 只需要在References添加A的Message-ID.
而且,添加References有两种形式:
缩进模式: 第n封邮件要添加前面第1到第(n-1)封邮件的Message-ID
并列模式: 第2到n封邮件只需要添加第1封邮件的Message-ID
了解完原理,开始coding
PHPMailer是一个很实用的PHP邮件库,由于项目使用PHP5,所以只能使用5.2版本.
设置Message-ID很简单,PHPMailer里面有:
public $MessageID;
留意作者的提示:
You can set your own, but it must be in the format "<id@domain>",
发送邮件前直接设置Message-ID的值
$this->$MessageID = '[email protected]';
当前版本的PHPMailer没有提供直接修改References的接口,但我找到另一条途径:
public function addCustomHeader($name, $value = null)
这就简单了.
只需要:
$referID = '[email protected]'; $this->addCustomHeader('References',$referID);
把其他必填项和选填项填满后,就可以发送看效果啦!