【问题标题】:How to make mail threading work after adding ticket id in the email subject在电子邮件主题中添加票证 ID 后如何使邮件线程工作
【发布时间】:2016-07-08 18:39:17
【问题描述】:

我正在使用 PHP 开发票务系统。我把邮件转换成票。当用户从票务系统回复邮件时,它会将邮件作为新邮件发送给客户。没有消息/邮件线程。

我认为,我的问题与主题末尾添加的票证 ID 有关。 (例如Subject: Installation Problem [#EMSY45]

我已在标头中传递了消息 ID 和引用

我正在使用 PHPMailer 发送邮件。

这是我的代码:

$mail = new PHPMailer();
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = str_replace('/', '', $host); // Specify main and backup SMTP servers
if($outgoing_server_details['smtp_auth'] == 1)
        $mail->SMTPAuth = true; // Enable SMTP authentication

$mail->Username = $outgoing_server_details['server_username']; // SMTP username
$mail->Password = $outgoing_server_details['server_password']; // SMTP password
$mail->SMTPSecure = $protocol; // Enable TLS encryption, `ssl` also accepted
$mail->Port = $port;

$mail->setFrom($outgoing_server_details['from_email_field'], $from_name);
$mail->addAddress($data['_from'], $to_name); // Add a recipient
$mail->addReplyTo($outgoing_server_details['from_email_field'], $reply_to_name);
$message_id = $data['message_id'];
$mail->AddCustomHeader('In-Reply-To', $message_id);
$mail->AddCustomHeader('References', $message_id);

//$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = $data['subject'];
$mail->Body    = $mail_content;
$mail->send();

【问题讨论】:

  • 您通过设置这些标头做正确的事情,但您确实需要检查收到的消息中的标头 - 您确定消息 ID 填充正确,并且与之前的消息匹配到底是身份证?
  • @Synchro 我确定,我正在正确添加消息 ID。当我使用 IMAP 获取邮件时。我也得到消息ID。我也在为 References 标头添加相同的消息 ID。
  • 有些客户比其他客户更善于关注这些标题 - 有些有点没用,而是依赖于启发式匹配主题行 - 或者甚至同时使用两者。您是否在所有客户端应用中都看到了这种行为?
  • @Synchro 我现在使用的是 Mac 默认邮件客户端。有时,它在那里正确显示了线程。但在 Gmail 中,我一开始并没有看到该线程。当主题更新时,它开始了自己的线程。是否必须将先前的回复与回复一起发送?
  • 我不确定,但 gmail 作为邮件客户端通常表现得很糟糕。除了众所周知的破坏 HTML 的能力之外,它还会得到完全错误的回复处理。要以正确的方式进行线程,我建议阅读thisthisthis question.

标签: php email phpmailer ticket-system


【解决方案1】:

如果您需要在电子邮件主题的末尾添加工单 ID,请尝试此操作。

$mail->Subject = "Installation Problem [".$message_id."]";

$mail->Subject = $data['subject'].$message_id;

还有一个更正

$mail->isHTML(true);//应该总是在设置 Body 之后出现。

即,

$mail->Subject = $data['subject'].$message_id;
$mail->Body    = $mail_content;
$mail->isHTML(true);
$mail->send();

【讨论】:

  • 这是一个表面修复,而不是解决方案。何时拨打 isHTML 无关紧要 - 请阅读代码。
  • @avinash 我可以在主题末尾添加票证 ID。我的问题是邮件线程。当我在最后添加票证 ID 时,邮件线程不起作用。
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 2019-01-09
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多