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