2015-09-02 2 views
9

Я пытаюсь создать службу IMAP на своем веб-сайте с помощью php. Он в основном имеет несколько шагов.Интеграция IMAP на веб-сайт php

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

У меня есть список папок, у меня есть список писем, у меня есть детали писем, но они являются отдельной частью, но я хочу объединить и создать один процесс, как указано выше.

Код 3 шага приводится ниже

Шаг 1 папки списка: Это будет список всех папок Gmail. Код, который я имею

$folders = imap_list($imap, "{imap.gmail.com:993/imap/ssl}", "*"); 
echo "<ul>"; 
foreach ($folders as $folder) { 
    $folder = str_replace("{imap.gmail.com:993/imap/ssl}", "", $folder); 
    $folder = str_replace("[Gmail]/", "", $folder); 
    echo '<li>' . $folder . '</li>'; 
} 
echo "</ul>"; 

о/р шаге 1

INBOX 
DRAFT 
SENT 
TRASH 

Шаг 2 список адресов электронной почты (нажав на список рассылки папки должны получить открыт)

$numMessages = imap_num_msg($imap); 

for ($i = $numMessages; $i > ($numMessages - 20); $i--) 
    { 
     $header = imap_header($imap, $i); 
     $fromInfo = $header->from[0]; 
     $replyInfo = $header->reply_to[0]; 

     $details = array(
     "fromAddr" => (isset($fromInfo->mailbox) && isset($fromInfo->host)) 
      ? $fromInfo->mailbox . "@" . $fromInfo->host : "", 
     "fromName" => (isset($fromInfo->personal)) 
      ? $fromInfo->personal : "", 
     "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host)) 
      ? $replyInfo->mailbox . "@" . $replyInfo->host : "", 
     "replyName" => (isset($replyTo->personal)) 
      ? $replyto->personal : "", 
     "subject" => (isset($header->subject)) 
      ? $header->subject : "", 
     "udate" => (isset($header->udate)) 
      ? $header->udate : "" 
     ); 

    $uid = imap_uid($imap, $i); 

    $datee= gmdate("F j, Y, g:i a", $details["udate"]); 

    echo "<ul>"; 
    echo "<li><strong>From:</strong>" . $details["fromName"]; 
    echo " " . $details["fromAddr"] . "</li>"; 
    echo "<li><strong>Subject:</strong> " . $details["subject"] . "</li>"; 
    echo "<li><strong>DATE:</strong> " . $datee . "</li>"; 

    } 

о/p на шаге 2 (щелчок по определенному почтовому содержимому этой почты должен быть открыт)

From:ABC 
Subject: TOPIC 
DATE: September 2, 2015, 9:00 am 

Шаг 3 Просмотр сообщений

$message_count = imap_num_msg($imap); 

    for ($i = 1; $i <= $message_count; ++$i) { 
     $header = imap_header($imap, $i); 
     $body = trim(substr(imap_body($imap, $i), 0, 100)); 
     $prettydate = date("jS F Y", $header->udate); 

     if (isset($header->from[0]->personal)) { 
      $personal = $header->from[0]->personal; 
     } else { 
      $personal = $header->from[0]->mailbox; 
     } 

     $email = "$personal <{$header->from[0]->mailbox}@{$header->from[0]->host}>"; 
     echo "On $prettydate, $email said \"$body\".\n"; 
    } 

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

+0

Обратите внимание, что вам, возможно, придется проверить IP-адрес вашего сервера, прежде чем Google сможет получить доступ к электронной почте через IMAP. (Https://github.com/rapideinternet/php-validate-imap-ip-gmail) – akalucas

ответ

0

Есть несколько способов сделать это.

Один из способов будет:

Вы можете посмотреть в использовании создание гиперссылок для структуры папок и элементов в списке сообщений, а затем связать функции JavaScript с этими гиперссылками

Изменить echo '<li>' . $folder . '</li>';
в echo '<li><a name="' . $folder . '" onClick="listFolder(this.name)" href="#">'. $folder . '</a></li>'; который создаст имя каждой папки как гиперссылку, которую можно нажать, чтобы вызвать функцию javascript.

Вам нужно будет написать функции javascript, например. listFolder(), чтобы отобразить содержимое папки.

0

Если вы хотите сделать это без перезагрузки страницы после каждого выбора, вам придется использовать запросы AJAX. Вам понадобится:

1) Одна нормальная страница, в которой перечислены доступные папки в выпадающем меню. При выборе папки в выпадающем списке необходимо вызвать функцию Javascript, которая выполняет запрос AJAX.

2) После этого вам нужно будет обработать запрос AJAX с шага 1) и вернуть структуру данных, содержащую все доступные сообщения. Снова использование JS заполняет таблицу или список или что-то еще на одной странице на шаге 1).

3) Наконец, вам нужно будет приложить другой метод Javascript к сообщениям, определенным на шаге 2), чтобы сделать еще один запрос AJAX серверу для возврата отдельного содержимого сообщения, а затем с помощью JS вставить это в панель сообщений страница с шага 1).

Если вы хотите, чтобы генерировать AJAX запросы легко могу порекомендовать JQuery конечно - https://api.jquery.com/jquery.ajax/

Во-вторых, чтобы помочь PHP код, взаимодействующий с сервером IMAP Я также настоятельно рекомендую Выборки библиотеку, которая поможет вам избежать много ошибок и абстрактной сложности из вашего кода. https://github.com/tedious/Fetch

Смежные вопросы