2015-09-02 17 views
9

Sto tentando di creare un servizio IMAP sul mio sito Web con l'aiuto di php. Praticamente ha pochi passaggi.Integrazione di IMAP sul sito Web php

La parte principale che voglio è che ottengo un elenco di cartelle di account Gmail, al clic di una particolare cartella, l'elenco di mail in quella cartella dovrebbe essere aperto e al clic di una particolare posta, i suoi dettagli dovrebbe aprirsi.

Ho la lista delle cartelle, ho una lista di mail, ho i dettagli delle mail, ma sono parte separata, ma desidero combinare e creare un processo come detto sopra.

Il codice di 3 fasi è riportata qui sotto

Fase 1 Elenco cartelle: Sarà un elenco di tutte le cartelle di Gmail. Il codice che ho è

$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 di fase 1

INBOX 
DRAFT 
SENT 
TRASH 

Fase 2 lista e-mail (cliccando su una lista di posta cartella dovrebbe rimanere aperto)

$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 passaggio 2 (fare clic su un particolare contenuto di posta di quella mail dovrebbe essere aperto)

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

Fase 3 Visualizzazione dei messaggi

$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"; 
    } 

Qualcuno può tel come posso raggiungere il requisito di cui sopra

+0

Si noti che potrebbe essere necessario verificare l'IP del server prima che Google consenta l'accesso alle e-mail tramite IMAP. (Https://github.com/rapideinternet/php-validate-imap-ip-gmail) – akalucas

risposta

0

Ci sono un paio di modi per farlo.

Un modo potrebbe essere:

Si può considerare di usare i collegamenti ipertestuali che creano per struttura delle cartelle e le voci nell'elenco dei messaggi e quindi associare funzioni javascript con questi collegamenti ipertestuali

Change echo '<li>' . $folder . '</li>';
a echo '<li><a name="' . $folder . '" onClick="listFolder(this.name)" href="#">'. $folder . '</a></li>'; che creerà ogni nome di cartella come un collegamento ipertestuale che può essere cliccato per attivare una funzione javascript.

Dovresti scrivere funzioni javascript es. listFolder() per elencare il contenuto della cartella.

0

Se si desidera eseguire questa operazione senza ricaricare una pagina dopo ciascuna selezione, sarà necessario utilizzare le richieste AJAX. È necessario:

1) Una pagina normale che elenca le cartelle disponibili in un menu a discesa. Selezionando una cartella nel menu a discesa, sarà necessario attivare una funzione Javascript che esegue una richiesta AJAX.

2) Sarà quindi necessario gestire la richiesta AJAX dal passaggio 1) e restituire una struttura dati contenente tutti i messaggi disponibili. Ancora usando JS compilare una tabella o un elenco o qualsiasi altra cosa sulla stessa pagina nel passaggio 1).

3) Infine, sarà necessario associare un altro metodo Javascript ai messaggi definiti nel passaggio 2) per fare un'altra richiesta AJAX al server per restituire il contenuto del singolo messaggio, quindi utilizzare JS per inserirlo nel riquadro dei messaggi di la pagina dal passaggio 1).

Se si vuole fare la generazione di richieste AJAX facile posso consigliare JQuery ovviamente - https://api.jquery.com/jquery.ajax/

In secondo luogo, per aiutare il codice PHP che interagisce con il server IMAP posso anche consigliare vivamente la biblioteca, che vi aiuterà a evitare Fetch un sacco di insidie ​​e complessità astratte dal tuo codice. https://github.com/tedious/Fetch