[ Index ]

PHP Cross Reference of JPSpan 0.4 (beta)

title

Body

[close]

/examples/ -> mailresponder.php (source)

   1  <?php
   2  // $Id: mailresponder.php,v 1.2 2004/11/16 14:57:57 harryf Exp $
   3  /***
   4  * A responder that uses PEAR::Mail_IMAP for fetching data from a
   5  * mail server
   6  * Requires: PEAR::Mail_IMAP and PHP imap extension installed
   7  * Modify the mailUrl variable in the Mail class below
   8  *
   9  * @TODO: secure the responder with HTTP Auth
  10  */
  11  
  12  /**
  13  * This is a remote script to call from Javascript
  14  */
  15  // IE's XMLHttpRequest caching...
  16  header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
  17  header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); 
  18  header( "Cache-Control: no-cache, must-revalidate" ); 
  19  header( "Pragma: no-cache" );
  20  
  21  require_once  '../JPSpan.php';
  22  require_once JPSPAN . 'Listener.php';
  23  require_once JPSPAN . 'Serializer.php';
  24  require_once JPSPAN . 'Types.php';
  25  
  26  // PEAR Mail_IMAP
  27  require_once 'Mail/IMAP.php';
  28  
  29  // Sadly required for Mail_IMAP
  30  error_reporting (E_ALL ^ E_NOTICE);
  31  
  32  class Mail {
  33      /**
  34      * Modify this
  35      */
  36      var $mailUrl = 'imap://user:pass@mail.someserver.net:143/INBOX';
  37  
  38      function getMessageList() {
  39          $conn =& new Mail_IMAP();
  40          $status = & $conn->connect($this->mailUrl);
  41          if (PEAR::isError($status)) {
  42              $e = new JPSpan_Error();
  43              $e->setError('ConnectError',$status->getMessage());
  44              return $e;
  45          }
  46          $msgcount = $conn->messageCount();
  47          $messages = array();
  48          for ($mid = 1; $mid <= $msgcount; $mid++) {
  49              $pid = $conn->getDefaultPid($mid);
  50              $conn->getHeaders($mid, $pid);
  51              $message = array();
  52              $message['mid'] = $mid;
  53              $message['pid'] = $pid;
  54              if (!isset($conn->header[$mid]['subject']) ||
  55                  empty($conn->header[$mid]['subject'])) {
  56                  $message['subject'] = 'No subject';
  57              } else {
  58                  $message['subject'] = trim($conn->header[$mid]['subject']);
  59              }
  60              if ( isset($conn->header[$mid]['from_personal'][0]) &&
  61                      !empty($conn->header[$mid]['from_personal'][0]) ) {
  62                  $message['from'] = $conn->header[$mid]['from_personal'][0];
  63              } else {
  64                  $message['from'] = $conn->header[$mid]['from'][0];
  65              }
  66              $message['date'] = date('D, M d, Y h:i:s', $conn->header[$mid]['udate']);
  67              $conn->unsetHeaders($mid);
  68              $messages[] = $message;
  69          }
  70          $conn->close();
  71          return $messages;
  72      }
  73      function getMessage($mid,$pid) {
  74          $conn =& new Mail_IMAP();
  75          $status = & $conn->connect($this->mailUrl);
  76          if (PEAR::isError($status)) {
  77              $e = new JPSpan_Error();
  78              $e->setError('ConnectError',$status->getMessage());
  79              return $e;
  80          }
  81          if ( !$conn->getHeaders($mid, $pid) ) {
  82              $e = new JPSpan_Error();
  83              $e->setError('MessageError','Unable to fetch message with MID '.$mid);
  84              return $e;
  85          }
  86          $message = array();
  87          if (!isset($conn->header[$mid]['subject']) || empty($conn->header[$mid]['subject'])) {
  88              $message['subject'] = 'No subject';
  89          } else {
  90              $message['subject'] = trim($conn->header[$mid]['subject']);
  91          }
  92          if ( isset($conn->header[$mid]['from_personal'][0]) &&
  93                  !empty($conn->header[$mid]['from_personal'][0]) ) {
  94              $message['from'] = $conn->header[$mid]['from_personal'][0];
  95          } else {
  96              $message['from'] = $conn->header[$mid]['from'][0];
  97          }
  98          $message['date'] = date('D, M d, Y h:i:s', $conn->header[$mid]['udate']);
  99          $body = $conn->getBody($mid, $pid);
 100          $message['body'] = strip_tags(trim($body['message']));
 101          $conn->unsetHeaders($mid);
 102          $conn->close();
 103          return $message;
 104      }
 105  }
 106  
 107  /**
 108  * Generates a serialized response
 109  */
 110  class SerializingResponder {
 111      function execute($payload) {
 112          $M = & new Mail();
 113          if ( isset($payload['mid']) && isset($payload['pid']) ) {
 114              $response = $M->getMessage($payload['mid'],$payload['pid']);
 115          } else {
 116              $response = $M->getMessageList();
 117          }
 118          echo JPSpan_Serializer::serialize($response);
 119      }
 120  }
 121  
 122  $L = & new JPSpan_Listener();
 123  $L->setResponder(new SerializingResponder());
 124  $L->serve();
 125  ?>


Generated: Fri Nov 26 11:42:46 2004 Cross-referenced by PHPXref 0.6