Как я могу переместить сообщение электронной почты из одной папки в другую, используя PHP imap

Я пытаюсь прочитать сообщения из электронной почты … В зависимости от содержимого темы я хочу переместить ее в папку «Процессы» или «Неавторизованные»

сохранить сообщения в массиве, а затем переместить сообщение из папки «Входящие» в папку «Продолжить»

Вот что я сделал

// Checks the inbox
if ($messages = imap_search($this->conn,'ALL'))
{
// Sorts the messages newest first
rsort($messages);
// Loops through the messages
foreach ($messages as $id)
{
$header = imap_headerinfo($this->conn, $id);
$message = imap_fetchbody($this->conn, $id, 1);

if(    !isset($header->from[0]->mailbox) || empty($header->from[0]->mailbox)
|| !isset($header->from[0]->host) || empty($header->from[0]->host)
|| !isset($header->subject) || empty($header->from[0]->host)
) {
continue;
}

$from = $header->from[0]->mailbox . '@' . $header->from[0]->host;
$subject = $header->subject;

$outlook = $this->_parseReplyExchange($message);

if($outlook !== false){
$newReply = $outlook;
} else {
$newReply = $this->_parseReplySystem($message);
}

$ticketID = $this->_parseTicketID($subject);
if($ticketID !== false){
$f = array();
$f['id'] = $id;
$f['from'] = $from;
$f['subject'] = $subject;
$f['ticketID'] = $ticketID;
$f['message'] = $newReply;
$this->replyList[] = $f;

$imapresult = imap_mail_move($this->conn, $id, $box, CP_UID);

if($imapresult == false){
echo imap_last_error();
}
}
}
}
else
{
exit('No messages on the IMAP server.');
}

Я прочитал сообщение без проблем, но при попытке переместить сообщение выдает ошибку.

.[TRYCREATE] The requested item could not be found.
Notice: Unknown: [TRYCREATE] The requested item could not be found. (errflg=2) in Unknown on line 0

Я думаю, что проблема заключается в том, как я передаю $ id в imap_mail_move функция.

Я также попытался преобразовать номер последовательности сообщения в номер UID, например, так $f['id'] = imap_uid($this->conn , $id ) и это не сработало ..

Я тоже пробовал это

$imapresult = imap_mail_move($this->conn, '1:' . $id, $box);
$imapresult = imap_mail_move($this->conn, '1:' . $id, $box, CP_UID);

Я даже пытался скопировать, а затем удалить сообщение, и это не сработало.

$imapresult = imap_mail_copy($c, '1', 'INBOX/Processed', CP_MOVE);

Я не могу получить сообщение для перемещения.

Как я могу правильно переместить сообщение?

-1

Решение

Я нашел проблему.

Проблема была в том, что Processed папка не была подпапкой папки INBOX. Это была папка рядом с INBOX.

Забрать здесь при использовании imap_mail_move () Функция вам нужно будет передать либо порядковый номер или диапазон порядковых номеров

$imapresult = imap_mail_move($this->conn, $id, $box);

Каждое полученное сообщение имеет порядковый номер 1,2,3,n где n — самое новое сообщение, полученное в поле выдачи.

Вот примеры $id переменная

1
1:5
1,2,5,6,7

Первый пример означает перемещение сообщения 1 из текущей папки в новую папку, определенную в $box,

Второй пример означает перемещение сообщений 1,2,3,4,5 из текущей папки в новую папку, определенную в $box,

Третий пример означает перемещение сообщений 1,2,5,6,7 из текущей папки в новую папку, определенную в $box,

Кроме того, вот несколько примеров переменной $ box

'INBOX/Processed'
'Unauthorized'

Первый пример означает Processed папка, которая находится в папке INBOX.

Второй пример означает Unauthorized папка, которая находится рядом с «той же папкой» в папке INBOX

Чтобы узнать, где каждая папка находится в вашей электронной почте, вы можете использовать imap_list функция.

Я надеюсь, что это помогает другим, так как мне понадобилось время, чтобы найти эту глупую проблему.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]