| [ Index ] |
PHP Cross Reference of JPSpan 0.4 (beta) |
[Summary view] [Print] [Text view]
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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Fri Nov 26 11:42:46 2004 | Cross-referenced by PHPXref 0.6 |