phpmailer實現Thunderbird話題跟蹤(Threads)郵件發送

業務需求,須要開發"發送Threads郵件"的功能

1、工具介紹

  1. php5
  2. PHPMailer 5.2.25

2、工做原理

上司只說起一個關鍵詞: Thread, 對應的中文是 話題. 他也不知道這個是怎麼實現的.php

我用QQ郵箱作了測試,發現QQ郵箱是使用標題做爲話題跟蹤的線索,因此用原有的方法發送一封郵件,也能夠實現話題跟蹤的功能,這個與個人目標不符.git

後來,在網上搜了好久,終於發現了這篇文章:
How to Merge Threads in Mozilla Thunderbird — The Advanced Way
裏面介紹了會話跟蹤的原理: Message-IDReferencesgithub

假設我發送了A郵件,A郵件會有獨特的Message-ID, 後來發送的B郵件若是要與A造成會話, 只須要在References添加A的Message-ID.dom

並且,添加References有兩種形式:工具

縮進模式: 第n封郵件要添加前面第1到第(n-1)封郵件的Message-ID
縮進模式測試

並列模式: 第2到n封郵件只須要添加第1封郵件的Message-ID
並列模式this

瞭解完原理,開始codingspa

3、PHPMailer的摸索

PHPMailer是一個很實用的PHP郵件庫,因爲項目使用PHP5,因此只能使用5.2版本.code

1. Message-ID

設置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';

2. References

當前版本的PHPMailer沒有提供直接修改References的接口,但我找到另外一條途徑:

public function addCustomHeader($name, $value = null)

這就簡單了.

只須要:

$referID = '1a2b3c4d@example.com';
$this->addCustomHeader('References',$referID);

4、完成

把其餘必填項和選填項填滿後,就能夠發送看效果啦!

5、感想

  1. 遇到全新的任務時,不用懼怕,由於老是有解決方案的.
  2. 要沉下心來找資料.
  3. 思考方案,敢於嘗試

6、參考資料

  1. How to Merge Threads in Mozilla Thunderbird — The Advanced Way
  2. PHPMailer 5.2
相關文章
相關標籤/搜索