Я пытаюсь создать службу 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>";
}
o / 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";
}
Может кто-нибудь, пожалуйста, тел, как я могу достичь вышеуказанного требования
Есть несколько способов сделать это.
Одним из способов будет:
Вы можете изучить использование создания гиперссылок для структуры папок и элементов в списке сообщений, а затем связать функции javascript с этими гиперссылками.
+ Изменить
echo '<li>' . $folder . '</li>';
в
echo '<li><a name="' . $folder . '" onClick="listFolder(this.name)" href="#">'. $folder . '</a></li>';
который создаст каждое имя папки в виде гиперссылки, по которой можно щелкнуть, чтобы активировать функцию JavaScript.
Вы должны были бы написать функции JavaScript, например. listFolder()
перечислить содержимое папки.
Если вы хотите сделать это без перезагрузки страницы после каждого выбора, вам придется использовать запросы 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, я также настоятельно рекомендую библиотеку Fetch, которая поможет вам избежать многих подводных камней и абстрактных сложностей в вашем коде. https://github.com/tedious/Fetch