Отображение электронных писем IMAP с использованием PHP - ЕСЛИ количество писем в теме четное, письма отображаются некорректно - PullRequest
0 голосов
/ 23 октября 2019

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

Сценарий работает так:

  1. Форма заполняется пользователем, после отправки данных создается заявка, а электронная почта, содержащая основную информацию о заявке, отправляется в группу поддержки.

  2. Группа поддержки отвечает на почту с некоторыми инструкциями

  3. Этот диалог между Пользователем и Группой поддержки должен отображаться на странице заявки с текущимикод Я сталкиваюсь со следующей проблемой:

Если количество писем в цепочке является ODD, письма отображаются правильно (под нечетным я имею в виду числа ODD, 1/3/5/7 и т. д.)

Если количество писем равно ДАЖЕ, некоторые ответы отсутствуют в ветке.

Вот код:

<?php

    $imap         = imap_open('{mail.mail.eu:993/imap/ssl}INBOX', 'mail@mail.com', 'Mailpass');

    //Testing value
    $value2 = '6';
    $subject     = 'Escalation Ticket No.: '.$value2.' has been created and assigned to you.';
    $threads     = array();

    //remove re: and fwd:
    $subject = trim(preg_replace("/Re\:|re\:|RE\:|Fwd\:|fwd\:|FWD\:/i", '', $subject));

    //search for subject in current mailbox
    $results = imap_search($imap, 'SUBJECT "'.$subject.'"', SE_UID);

    //because results can be false
    if(is_array($results)) {
        //now get all the emails details that were found
        $emails = imap_fetch_overview($imap, implode(',', $results), FT_UID);



        //foreach email
        foreach ($emails as $email) {
            //add to threads
            //we date date as the key because later we will sort it
            $threads[strtotime($email->date)] = $email;
        }   
    }

    //now reopen sent messages
    imap_reopen($imap, '{mail.mail.com:993/imap/ssl}INBOX.Sent');

    //and do the same thing
    //search for subject in current mailbox
    $results = imap_search($imap, 'SUBJECT "'.$subject.'"', SE_UID);

    //because results can be false
    if(is_array($results)) {
        //now get all the emails details that were found
        $emails = imap_fetch_overview($imap, implode(',', $results), FT_UID);


        //foreach email
        foreach ($emails as $email) {
            //add to threads
            //we date date as the key because later we will sort it
            $threads[strtotime($email->date)] = $email;
        }   
    }

    //sort keys so we get threads in chronological order
    ksort($threads);


    foreach ($threads as $key => $object) {

    $kee = $object->msgno;

    $qprint = imap_fetchbody($imap, $kee, 2);


    }

    echo quoted_printable_decode($qprint);


?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...