texto - Integrando IMAP en el sitio web de php
string strip_tags (2)
Hay un par de maneras de hacer esto.
Una forma sería:
Puede buscar el uso de la creación de hipervínculos para la estructura de carpetas y los elementos en la lista de mensajes y luego asociar funciones de JavaScript con estos hipervínculos.
Cambiar echo ''<li>'' . $folder . ''</li>'';
echo ''<li>'' . $folder . ''</li>'';
para hacer echo ''<li><a name="'' . $folder . ''" onClick="listFolder(this.name)" href="#">''. $folder . ''</a></li>'';
echo ''<li><a name="'' . $folder . ''" onClick="listFolder(this.name)" href="#">''. $folder . ''</a></li>'';
que creará cada nombre de carpeta como un hipervínculo en el que se puede hacer clic para activar una función de JavaScript.
Tendría que escribir funciones de JavaScript, por ejemplo. listFolder()
para listFolder()
el contenido de la carpeta.
Estoy intentando crear un servicio IMAP en mi sitio web con la ayuda de php. Básicamente tiene pocos pasos.
La parte principal que quiero es que obtenga una lista de carpetas de la cuenta de Gmail, al hacer clic en una carpeta en particular, la lista de correos en esa carpeta debe abrirse y al hacer clic en cualquier correo en particular, sus detalles deberían abrirse.
Tengo la lista de carpetas, tengo una lista de correos, tengo detalles de correos, pero son partes separadas, pero deseo combinar y crear un proceso como se indicó anteriormente.
El código de 3 pasos se da a continuación
Paso 1 Lista de carpetas: listará todas las carpetas de gmail. El código que tengo es
$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>";
o / p del paso 1
INBOX
DRAFT
SENT
TRASH
Paso 2 Lista de correo electrónico (haciendo clic en una carpeta, la lista de correo debe abrirse)
$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 del paso 2 (se debe abrir el clic en un contenido de correo particular de ese correo)
From:ABC
Subject: TOPIC
DATE: September 2, 2015, 9:00 am
Paso 3 Ver mensajes
$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";
}
¿Alguien puede decir cómo puedo lograr el requisito anterior?
Si desea hacer esto sin una recarga de página después de cada selección, tendrá que usar las solicitudes AJAX. Necesitará:
1) Una página normal que enumera las carpetas disponibles en un menú desplegable. La selección de una carpeta en el menú desplegable deberá activar una función de Javascript que realice una solicitud de AJAX.
2) Deberá gestionar la solicitud AJAX del paso 1) y devolver una estructura de datos que contenga todos los mensajes disponibles. De nuevo, usando JS, rellene una tabla o lista o lo que sea en la misma página en el paso 1).
3) Finalmente, deberá adjuntar otro método de Javascript a los mensajes definidos en el paso 2) para hacer otra solicitud de AJAX al servidor para devolver el contenido del mensaje individual, y luego usar JS insertar esto en el panel de mensajes de la página desde el paso 1).
Si desea facilitar la generación de solicitudes AJAX, puedo recomendar JQuery, por supuesto - https://api.jquery.com/jquery.ajax/
En segundo lugar, para ayudar a que el código PHP interactúe con el servidor IMAP, también recomiendo encarecidamente la biblioteca Fetch, que le ayudará a evitar una gran cantidad de errores y a la complejidad abstracta de su código. https://github.com/tedious/Fetch