Функция imap_fetchbody не получает все электронные письма - PullRequest
2 голосов
/ 11 апреля 2019

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

Я использую функцию imap_fetchbody.Однако, когда я пытаюсь посчитать (используя imap_num_msg) или получить заголовки (включая «0» в параметре «section» imap_fetchbody), он распознает все электронные письма, очевидно, без тела.База данных является локальной.

function getEmails(){
        $query = "SELECT * FROM users";
        $result = mysqli_query($this->connection, $query);
        while($row = mysqli_fetch_assoc($result)) {
            $imapResource = imap_open($row["mailbox"], $row["usernamemail"], $row["passwordmail"], NULL) or die ('IMAP connection error');
        }

        $body_count = imap_num_msg($imapResource);
        echo "There is a total of " . $body_count . " emails in your inbox. <br>"; // This counts REAL total amount of emails

        $emails = imap_search($imapResource, "ALL");
        rsort($emails);
            if(!empty($emails)){ 
                foreach($emails as $email){
                    // Fetch mail content
                    $overview = imap_fetch_overview($imapResource, $email, 0);
                    $overview = $overview[0];
                    $structure = imap_fetchstructure($imapResource, $email);
                    $attachments = array();

                    $id = $overview->uid;
                    $date = $overview->date;
                    $from = $overview->from;
                    $to = $overview->to;
                    $subject = $overview->subject;

                    $seen = $overview->seen;
                    if ($seen == 0){
                        $seen = "Not Seen";
                    } else{
                        $seen = "Seen";
                    }

                    $body = imap_fetchbody($imapResource, $email, "1", FT_PEEK);  

// Check duplicates before uploading
                    $checkQuery = "SELECT ID FROM emails";
                    $result = mysqli_query($this->connection, $checkQuery);
                    if(mysqli_num_rows($result) > 0) {

                        while($row = mysqli_fetch_assoc($result)){



                            $testID = (string)$id;
                            if($testID !== $row["ID"]){
                                // Input into DB
                                $query = "INSERT INTO emails (ID, Date_recieved, From_email, To_email, Subject, Body, Type, Seen) VALUES ('$id', '$date', '$from', '$to', '$subject', '$body', '$emailType', '$seen')";
                                mysqli_query($this->connection, $query);
                            } else {
                                break;

                            }
                        }
                    } else{       
                        // Input into DB
                        $query = "INSERT INTO emails (ID, Date_recieved, From_email, To_email, Subject, Body, Type, Seen) VALUES ('$id', '$date', '$from', '$to', '$subject', '$body', '$emailType', '$seen')";
                        mysqli_query($this->connection, $query);
                    }
}
}

Цель состоит в том, чтобы все электронные письма были вставлены в базу данных, а затем извлечены для отображения и управления пользователем

Исправлено Проблемабыли специальные символы в теме письма (одинарные кавычки).Замечено после установки

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Чтобы исправить, используйте mysqli_real_escape_string.

1 Ответ

0 голосов
/ 12 апреля 2019

Исправлено Проблема заключалась в специальных символах в теме письма (одиночная кавычка).Замечено после установки

mysqli_report (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);Для исправления используйте mysqli_real_escape_string .

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