PHP,回复电子邮件无法工作。

3

我试图用php回复邮件。我使用php imap从邮件服务器获取邮件并获得message-id。我正在尝试回复邮件,但该邮件仍然显示为新邮件,而不是带有线程消息的回复?

$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to email: ' . imap_last_error());
$emails = imap_search($inbox,'ALL');

if($emails) {

rsort($emails);

foreach($emails as $email_number) {
$overview = imap_fetch_overview($inbox,$email_number,0);
$message_id = $overview[0]->message_id;
$references[] = $overview[0]->message_id;

}

$references = implode(" ",$references);

$headers = "From: <test@domain.co.uk> \r\n";
$headers .= "In-Reply-To: $message_id\r\n";
$headers .= "References: $references\r\n";
$headers .= "Content-Type: text/html;\r\n";
$subject = "testing";
$message = "test message2";
mail( "test2@domain.co.uk", $subject, $message, $headers );

我正在使用来自http://www.jwz.org/doc/threading.html的头部信息In-Reply-ToReferences,主题也是相同的。我该怎么解决?


不清楚,兄弟 :) - aimme
2个回答

0

这是我所做的,我现在已经使用phpmailer实现了。我已经让它与Gmail一起工作,但我无法让它与Webmail一起工作。你有什么想法来解决这个问题吗?每个邮件应用程序的标题是否都必须不同? - user892134

0

我已经查看了你的代码,并注意到一些可能导致问题的事情。不确定它是否导致了问题。

  1. if($emails)总是为真,无论它是否为空,因为它是一个数组并且已经成功设置。执行print_r($emails)来检查imap_search()是否返回了一个空数组。

  2. $message_id = $overview[0]->message_id;这一行中,消息ID始终是最后一个$overview[0]->message_id,无论它是否在foreach内部,因为它只是一个变量,并且每次循环都会被重新分配,最后只有最后一个会被保留。

  3. 不确定,但我认为在$references[] = $overview[0]->message_id;这一行中,这是一个笔误,实际上应该是$references[] = $overview[0]->references;。关于$references[]的另一件事是,现在,在foreach结束时,它将携带所有电子邮件的消息ID。

  4. 不明白为什么,但我看到您已从收件箱中获取了所有电子邮件的概述,但最终只回复了单个邮件。

不确定但想要帮忙 :) 代码应该是这样的,尚未测试。但希望它能够工作。

$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to email: ' . imap_last_error());
$emails = imap_search($inbox,'ALL');

if(count($emails)>0) 
{

        rsort($emails);

        foreach($emails as $email_number) {
            $overview = imap_fetch_overview($inbox,$email_number,0);
            foreach($overview as $result){
                $message_id = $result->message_id;
                $references = $result->references;
            }
            //REMEMBER THIS WILL REPLY TO ALL YOUR INBOX EMAILS
            //NEED TO EDIT BEFORE USING
            reply($message_id,$references);
        }
}
function reply($message_id,$references){
        $headers = "From: <test@domain.co.uk> \r\n";
        $headers .= "In-Reply-To: ".$message_id."\r\n";
        $headers .= "References: ".$references."\r\n";
        $headers .= "Content-Type: text/html;\r\n";
        $subject = "testing";
        $message = "test message2";
        mail( "test2@domain.co.uk", $subject, $message, $headers );
}

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