基于电子邮件的PHP聊天窗口

时间:2012-03-30 22:41:10

标签: php ajax

我正在建立一个基于聊天/短信的系统我发送消息但我需要做的是用来自传入电子邮件的数据直接更新textarea而无需用户重新加载(ajax?)我需要传递一个数字来自fetch.php的主要页面,它获取电子邮件并使用尚未读取的电子邮件创建数组,并且来自正确的发件人我需要做的是将数字从主页面发送到获取页面并返回一些新的消息到主textarea,但我在ajax上找到的所有教程似乎都需要一个数据库,我不知道如何运行和返回数据延迟帮助将不胜感激。

以下是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 = 'user@gmail.com';
$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);

主页只是一个数字文本框,一个内容文本区域,一个消息文本框和一个发送按钮。

1 个答案:

答案 0 :(得分:0)

当来自浏览器的AJAX请求需要时,数据库需要存储消息以供您稍后获取。这是因为您的PHP脚本不会在两次后续运行之间保留其变量,因此您需要将消息存储在某处。所以它基本上会是这样的:

  1. 获取新消息
  2. 将它放在某种有序的队列中,您可以在此时间内获取所有内容,而不是客户端已有的内容。
  3. 将其发送给客户。
  4. 队列可以使用从第一个帖子向上计数的数字进行编号,从而允许客户指定他们最后收到的消息是什么,并请求更新的消息。

    顺便说一下,如果我上面没有说清楚,你所说的关于需要数据库的AJAX的说法有些被误解了。 AJAX可以正常运行,只需要你需要一些存储的情况,数据库是一个很好的方法。

    希望有所帮助:)