业务需求,需要开发"发送Threads邮件"的功能
一、工具介绍
- php5
- PHPMailer 5.2.25
二、工作原理
上司只提及一个关键词: 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的摸索
PHPMailer是一个很实用的PHP邮件库,由于项目使用PHP5,所以只能使用5.2版本.
1. Message-ID
设置Message-ID很简单,PHPMailer里面有:
public $MessageID;
留意作者的提示:
You can set your own, but it must be in the format "",
发送邮件前直接设置Message-ID的值
$this->$MessageID = '[email protected]';
2. References
当前版本的PHPMailer没有提供直接修改References的接口,但我找到另一条途径:
public function addCustomHeader($name, $value = null)
这就简单了.
只需要:
$referID = '[email protected]';
$this->addCustomHeader('References',$referID);
四、完成
把其他必填项和选填项填满后,就可以发送看效果啦!
五、感想
- 遇到全新的任务时,不用害怕,因为总是有解决方案的.
- 要沉下心来找资料.
- 思考方案,勇于尝试