2012-03-30 2 views
0

Я создаю систему на основе чата/SMS. Я отправляю сообщения, но мне нужно сделать это, обновить текстовое поле с данными из входящих писем без перезагрузки пользователя (ajax?) I нужно передать номер с главной страницы на fetch.php, который получает электронные письма, и создает массив из писем, которые не были прочитаны, и исходят от правильного отправителя, что мне нужно сделать, это отправить номер с главной страницы на страницу выборки и вернуть массив новых сообщений в основное текстовое поле, но все учебные пособия, которые я нашел в ajax, похоже, требуют базы данных, и я понятия не имею, как можно запускать и возвращать данные с помощью справки о задержке.Окно чата PHP на основе электронной почты

Вот содержание fetch.php:

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 

/* connect to gmail */ 
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; 
$username = '[email protected]'; 
$password = 'passwd'; 

/* try to connect */ 
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

/* grab emails */ 
$emails = imap_search($inbox,'ALL'); 

/* if emails are returned, cycle through each... */ 
if($emails) { 

    $messages[] = ''; 

    /* begin output var */ 
    $output = ''; 

    /* put the newest emails on top */ 
    rsort($emails); 

    /* for every email... */ 
    foreach($emails as $email_number) { 

    /* get information specific to this email */ 
    $overview = imap_fetch_overview($inbox,$email_number,0); 
    $message = imap_fetchbody($inbox,$email_number,1); 

    //print_r($overview); 

    $Is_sms = strpos($overview[0]->from, "txt.voice.google.com"); 
    if($Is_sms === false) continue; 
    if($overview[0]->seen != 0) continue; 

    $pnl = strpos($overview[0]->from, "."); 
    $pnumber = substr($overview[0]->from, $pnl +2, 10); 

    if($pnumber != "3303331866") continue; 

    $messages[] = $message; 

     //$status = imap_setflag_full($mbox, $mail, "\\Seen \\Flagged", ST_UID); 
    /* output the email header information */ 
    /*$output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">'; 
    $output.= '<span class="subject">'.$overview[0]->subject.'</span> '; 
    $output.= '<span class="from">'.$overview[0]->from.'</span>'; 
    //$output.= '<span class="date">on '.$overview[0]->date.'</span>'; 
    $output.= '<span class="pnumber">'.$pnumber.'</span>'; 
    $output.= '</div>';*/ 

    /* output the email body */ 
    //$output.= '<div class="body">'.$message.'</div>'; 
    } 

    //echo $output; 
    print_r($messages); 
} 

/* close the connection */ 
imap_close($inbox); 

Главная страница просто на номер текстовое поле, в текстовое поле контента, сообщение текстовое поле и кнопку отправки.

ответ

0

База данных необходима для хранения сообщений для вас, чтобы получить их позже, когда требуется запрос AJAX из браузера. Это связано с тем, что ваш PHP-скрипт не сохраняет свои переменные между двумя последующими прогонами, и поэтому вам нужно будет хранить сообщения где-то. Так что это будет в основном идти, как это:

  1. Получить новое сообщение
  2. поместить его в какой-то упорядоченной очереди, где вы будете иметь возможность получать все позже, чем то, что уже есть клиент.
  3. Отправьте его клиенту.

Очередь может быть пронумерована цифрами, отсчитываемыми вверх от первого сообщения, что позволяет клиентам указать, какое последнее полученное сообщение было получено, и запросить все новое.

BTW, если я не сделал это достаточно ясно выше, то, что вы сказали о AJAX, требующем базы данных, несколько неправильно понято. AJAX может нормально функционировать без него, его просто ваш случай, который требует некоторого хранения и базы данных, это хороший способ сделать это.

Надеюсь, что это поможет :)