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
相关文章
相关标签/搜索