使用PHPmailer回复电子邮件

5

我正在使用PHPmailer,并希望回复一封电子邮件。我使用phpimap获取电子邮件及其message_id。我试图使用PHPmailer回复电子邮件。我已经在addCustomHeader中使用了message_idIn-Reply-To。当我运行代码并检查电子邮件时,它显示为新消息而不是回复。我错在哪里了?

require 'PHPMailer-master/PHPMailerAutoload.php';

            $mail = new PHPMailer;

            //$mail->SMTPDebug = 3;                               // Enable verbose debug output

            $mail->isSMTP();                                      // Set mailer to use SMTP
            $mail->Host = 'mail.domain.co.uk';  // Specify main and backup SMTP servers
            $mail->SMTPAuth = true;                               // Enable SMTP authentication
            $mail->Username = 'test@domain.co.uk';                 // SMTP username
            $mail->Password = 'testing';                           // SMTP password
            $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
            $mail->Port = 587;                                    // TCP port to connect to

            $mail->FromName = 'Mailer';
            $mail->addAddress('test_2@domain.co.uk');     // Add a recipient
            $mail->isHTML(true);                          // Set email format to HTML
            $mail->addCustomHeader('In-Reply-To', $message_id);
            $mail->Sender = 'test@domain.co.uk';
            $mail->Subject = 'testing';
            $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
            $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

            if(!$mail->send()) {
                echo 'Message could not be sent.';
                echo 'Mailer Error: ' . $mail->ErrorInfo;
            } else {
                echo 'Message has been sent';
            }

如果主题相同,电子邮件将作为回复发送。 - Muhammad Bilal
我需要在主题前面添加“Re:”吗?我需要添加以前的邮件内容吗?还是邮件客户端自动完成这两个步骤? - user892134
你只需要保持主题不变,其余的电子邮件客户端会完成。 - Muhammad Bilal
我已经将主题设置为相同,但仍然显示为新消息。您能否在我的代码中发现我做错或遗漏了什么? - user892134
1
@madforstrength:错了,这与主题无关。 - Synchro
1个回答

8

如果一个线程中的每个消息都使用不同的主题行,那么将主题行作为最后一手选择来进行线程处理是非常合理的,因此如果您在其他方面做错了一切,那么线程处理就只能依赖于主题行。当客户端这样做时,实际上会很烦人,因为你会把没有关联的消息放在一起,它们恰好具有相同的主题。

使用ReferencesIn-Reply-To标头如RFC2822所定义来实现线程和回复。阅读本指南以了解如何可靠地进行线程处理的详细说明。

简而言之,对于第一条回复消息:

$mail->addCustomHeader('In-Reply-To', $message_id);
$mail->addCustomHeader('References', $message_id);

如果原始消息只是长串邮件中的最新一封邮件,但使用相同的标头,则会变得更加复杂-请阅读规范和指南以获取更多信息。
确保您的消息ID格式正确-它应该被<>包围,例如<d7751ea969c01cda464ebf2de2fe64e6@example.org>
您无需对主题行执行任何操作-虽然在前面添加Re:很常见,但这对于链接工作并不必要,而且它还因语言而异,因此您不能依赖它。

2
谢谢。只是为了明确起见,如果有4条消息,我需要将4个$message_id添加到References中,还是只需添加最新的$message_id - user892134
3
好的,只需要按顺序添加它们即可。如果长度开始变得太长,通常会删除其中一些,通常是中间的那些,因为您通常希望能够快速到达最近的回复或线程的根部。该指南讨论了这一点。 - Synchro
2
谢谢,你帮了大忙! - user892134

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接