我正在尝试使用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-To
和References
。主题也是相同的。我该如何解决?
答案 0 :(得分:0)
我查看了你的代码并发现了一些可能导致问题的原因。不确定是否导致问题。
if($emails)
将始终为true,无论其为空还是不为数组,并且已成功设置。请print_r($emails)
检查imap_search()
是否返回并清空数组。
在行$message_id = $overview[0]->message_id;
中,消息ID将始终是最后一个$overview[0]->message_id
,无论它是否在foreach中,因为它只是一个变量,并且每个循环都将被分配新的最后一个只保留最后一个。
不确定,但我认为排在$references[] = $overview[0]->message_id;
我认为这是一个错字,它应该是$references[] = $overview[0]->references;
。关于$references[]
的另一件事是,就像现在一样,在foreach结束时,它将携带所有电子邮件的所有消息ID。
不明白为什么,但是,我发现您已经从收件箱中获取了所有电子邮件的概述,但最后只考虑并回复了对单个邮件的回复。
不确定但是试图帮助:)代码会是这样的,还没有经过测试。但希望它有效。
$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 );
}
答案 1 :(得分:0)