phpmailer实现Thunderbird话题跟踪(Threads)邮件发送

lbcmail 2019-06-26

业务需求,需要开发"发送Threads邮件"的功能

一、工具介绍

  1. php5
  2. PHPMailer 5.2.25

二、工作原理

上司只提及一个关键词: Thread, 对应的中文是 话题. 他也不知道这个是怎么实现的.

我用QQ邮箱做了测试,发现QQ邮箱是使用标题作为话题跟踪的线索,所以用原有的方法发送一封邮件,也可以实现话题跟踪的功能,这个与我的目标不符.

后来,在网上搜了很久,终于发现了这篇文章:
How to Merge Threads in Mozilla Thunderbird — The Advanced Way
里面介绍了会话跟踪的原理: Message-IDReferences

假设我发送了A邮件,A邮件会有独特的Message-ID, 后来发送的B邮件如果要与A形成会话, 只需要在References添加A的Message-ID.

而且,添加References有两种形式:

缩进模式: 第n封邮件要添加前面第1到第(n-1)封邮件的Message-ID
phpmailer实现Thunderbird话题跟踪(Threads)邮件发送

并列模式: 第2到n封邮件只需要添加第1封邮件的Message-ID
phpmailer实现Thunderbird话题跟踪(Threads)邮件发送

了解完原理,开始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 "<id@domain>",

发送邮件前直接设置Message-ID的值

$this->$MessageID = '[email protected]';

2. References

当前版本的PHPMailer没有提供直接修改References的接口,但我找到另一条途径:

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

这就简单了.

只需要:

$referID = '[email protected]';
$this->addCustomHeader('References',$referID);

四、完成

把其他必填项和选填项填满后,就可以发送看效果啦!

五、感想

  1. 遇到全新的任务时,不用害怕,因为总是有解决方案的.
  2. 要沉下心来找资料.
  3. 思考方案,勇于尝试

六、参考资料

  1. How to Merge Threads in Mozilla Thunderbird — The Advanced Way
  2. PHPMailer 5.2

相关推荐