業務需求,須要開發"發送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);
把其餘必填項和選填項填滿後,就能夠發送看效果啦!