Вход Регистрация
Файл: htdocs/classes/smartmail.class.php
Строк: 292
<?php

    
/**********
     * 
     * SmartMail 1.0 - The WebMailClient for your SmartPhone        
     * copyright mac@homac.at
     * V 1.0
     *      
     **********/


  
class SmartMail {
  
    var 
$auth false;
    var 
$user;
    var 
$pass;
    var 
$server;
    var 
$port;
    var 
$basefolder "INBOX";
    var 
$sentfolder "INBOX.Sent";
    var 
$per_page;
    var 
$connection;
    var 
$error;
    var 
$success;
    var 
$p 1;     //current page
    
var $m 0;
    var 
$decode false;
      
    function 
SmartMail() {
      global 
$server$port$per_page;
      
$this->server $server;
      
$this->port $port;
      
$this->per_page $per_page;
      
$this->auth $_SESSION["auth"];
      
$this->user $_SESSION["user"];
      
$this->pass $_SESSION["pass"];
      
$p intval($_REQUEST["p"]);
      if (
$p$this->$p;
      
$f trim($_REQUEST["f"]);
      if (
$f$this->basefolder $f;
    }
    
    function 
login() {
      if (!
$_REQUEST["user"] || !$_REQUEST["pass"]) {
        
$this->error lang("err_nouserpass");
        return 
false;
      } else {
        
//check connection
        
$this->connect(false,$_REQUEST["user"],$_REQUEST["pass"]);
      }
      if (!
$this->error) {
        
$this->auth $_SESSION["auth"] = true;
        
$this->user $_SESSION["user"] = $_REQUEST["user"];
        
$this->pass $_SESSION["pass"] = $_REQUEST["pass"];
      } else return 
false;
    }
    
    function 
logout() {
      
session_destroy();
      
$this->success lang("succ_logout");
      
$this->auth false;
    }
    
    function 
connect($folder=false,$user=false,$pass=false) {
      if (!
$folder$folder $this->basefolder;
      if (!
$user$user $this->user;
      if (!
$pass$pass $this->pass;
      
$this->connection = @imap_open('{'.$this->server.':'.$this->port.'/novalidate-cert}'.$folder$user$pass);
      if (!
$this->connection$this->error lang("err_conn") . "<hr>" imap_last_error();
    }
    
    function 
messagelist() {
      
$this->connect();
      
$messages = array();
      
$messages["count"] = $this->messcount imap_num_msg($this->connection);
      
      
//some pagecalculations
      
if (!$this->p$this->1;
      if (((
$this->p-1) * $this->per_page) > $this->messcount$this->1;       //if page is too high the page will be set to 1
      
      
$starti $this->messcount - ($this->per_page*($this->p-1)); 
      
$endi $starti - ($this->per_page);
      if (
$endi 0$endi 0
      
$this->pages ceil($this->messcount/$this->per_page);
      
      for (
$i=$starti;$i>$endi;$i--) {
        
$decode false;
        
$cmess imap_fetch_overview($this->connection,$i);
        if (
$cmess) {
          
preg_match_all('/^(.*)<(.*@.*)>$/',$cmess[0]->from,$from_arr);
          
$cmess[0]->from_name trim($from_arr[1][0]);
          
$cmess[0]->from_mail trim($from_arr[2][0]);
          if (
$cmess[0]->from_name$cmess[0]->from $cmess[0]->from_name;
          elseif (
$cmess[0]->from_mail$cmess[0]->from $cmess[0]->from_mail;
          
          
          
//charset
          
if (preg_match('/UTF-8/',$cmess[0]->subject)) $decode "UTF8";
          
          
$cmess[0]->subject $this->messdecode($cmess[0]->subject,$decode);
          
$cmess[0]->from $this->messdecode($cmess[0]->from,$decode);
          
          
$messages["headers"][] = $cmess;
        }
      }
      return 
$messages;
    }
    
    function 
folderlist($checkmessages=true) {
      
$this->connect();
      
$folderlist = array();
      
      
//folderlist
      
$folders imap_listmailbox($this->connection'{'.$this->server.':'.$this->port.'/novalidate-cert}'"*");
      for (
$i=0;$i<count($folders);$i++) {
        
$thisfolder preg_replace('/(^.*}' $this->basefolder '.)/',"",$folders[$i]);
        if (
preg_match('/}/',$thisfolder)) $thisfolder $this->basefolder;
        
//messagecount
        
$checkfolder = ($thisfolder == $this->basefolder false $this->basefolder.".".$thisfolder);
        if (
$checkmessages$this->connect($checkfolder);
        if (
$checkmessages) {
          
$folderlist[] = array("checkfolder" => $checkfolder,
                                
"name" => $thisfolder,
                                
"messages" => ($checkmessages imap_num_msg($this->connection) : "0"));
        } else 
$folderlist[] = $checkfolder;
      }
      return 
$folderlist;
    }
    
    

    function 
drawPagination() {
      if (
$this->pages 2) return false;   //nothing to page
      
      
if ($this->== 1) {
        
$output "<img src='images/icons/pfirst_dis.png' alt='1'>
          <img src='images/icons/prwd_dis.png' alt='1'>n"
;
      } else {
        
$output "<a href='?p=1&amp;f=" $this->basefolder "'><img src='images/icons/pfirst.png' alt='1'></a>
          <a href='?p=" 
. ($this->1) . "&amp;f=" $this->basefolder "'><img src='images/icons/prwd.png' alt='1'></a>n";
      }
      
$output .= $this->"/" $this->pages "n";
      if (
$this->== $this->pages) {
        
$output.= "<img src='images/icons/pfwd_dis.png' alt='" $this->pages "'>
          <img src='images/icons/plast_dis.png' alt='" 
$this->pages "'>n";
      } else {
        
$output .= "<a href='?p=" . ($this->1) . "&amp;f=" $this->basefolder "'><img src='images/icons/pfwd.png' alt='1'></a>
          <a href='?p=" 
$this->pages "&amp;f=" $this->basefolder "'><img src='images/icons/plast.png' alt='" $this->pages "'></a>";
      }
      return 
$output;
    }
    
    
    function 
showmess() {
      
$this->intval($_REQUEST["m"]);
      
      
$this->connect($this->basefolder);
      
      
//check html
      
$body $this->get_part($this->m"TEXT/HTML");
      if (!
$body) {
        
$body $this->get_part($this->m"TEXT/PLAIN");
        
$body make_clickable($body);
        
$bodynl2br($body);
        
$type "text";
      }
      
//check headerinfos
      
$headerinfos imap_headerinfo($this->connection,$this->m);
            
      
$header = array("date" => $headerinfos->MailDate,
                      
"subject" => ($headerinfos->subject?$this->messdecode($headerinfos->subject):"No Subject"),
                      
"fromname" => $this->messdecode($headerinfos->from[0]->personal),
                      
"frommail" => $this->messdecode($headerinfos->from[0]->mailbox "@" $headerinfos->from[0]->host),
                      
"toaddress" => $this->messdecode($headerinfos->toaddress),
                      
"fromaddress" => $this->messdecode($headerinfos->fromaddress),
                      
"deleted" => ($headerinfos->Deleted == "D" true false),
                      );
      
//messcheck
      
$num imap_num_msg($this->connection);
      if (
$this->== 1$prev false;
      else 
$prev $this->1;
      if (
$this->$num$next $this->1;
      else 
$next false;
      


      
$message = array("body" => $body,
                       
"type" => $type,
                       
"header" =>$header,
                       
"next" =>$next,
                       
"prev" =>$prev);
      
      return 
$message;
    }
    
    function 
messdecode($str,$decode=false) {
      if (!
$decode$decode $this->decode;
      if (
$decode == "UTF8") return utf8_decode(strDecode($str));
      else return 
strDecode($str);
    }
    
    
//delete message
    
function delmess() {
      
$m intval($_REQUEST["m"]);
      if (!
$m) {
        
$this->error lang("err_messnotfound");
        return 
false;
      }
      
$this->connect($this->basefolder);
      
imap_delete($this->connection,$m);
      
$this->success lang("succ_delete");
    }
    
    
//delete message
    
function undelmess() {
      
$m intval($_REQUEST["m"]);
      if (!
$m) {
        
$this->error lang("err_messnotfound");
        return 
false;
      }
      
$this->connect($this->basefolder);
      
imap_undelete($this->connection,$m,'\DELETED');
      echo 
imap_last_error();
      
$this->success lang("succ_undelete");
    }
    
    
//send message
    
function sendmail() {
      global 
$subject$from$to$body$mode;
    
      
//errorchecking
      
if (!$subject$subject "No Subject";
      if (!
$from$errors[] = lang("err_nofrom");
      if (!
$to$errors[] = lang("err_noto");
      else {
        
//split for multiple mailadresses
        
$toarr explode(",",$to);
        for (
$i=0;$i<count($toarr);$i++) {
          if (!
is_email($toarr[$i])) $errors[] = sprintf(lang("err_wrongmail"),$toarr[$i]);
        }
      }
      if (!
$errors) {
        
//send message
        
imap_mail($to$subject$body"From: $fromnX-Mailer: PHP SmartMailnMime-Version: 1.0nContent-Type: text/plain; charset=iso-8859-1nContent-Transfer-Encoding: 8bitn");
        
        
//flag as replied when replied
        
if ($mode == "reply" && $this->m) {
          
//connection from showmess
          
imap_setflag_full($this->connection$this->m"\Answered");
        }
        
        
//move message to sent folder
        
if ($this->sentfolder) {
          
$folders $this->folderlist(false);
          if (
in_array($this->sentfolder,$folders)) {
            
$this->connect($this->sentfolder);
            
            
imap_append($this->connection'{'.$this->server.'}'.$this->sentfolder"To: $tonFrom$fromnSubject$subjectnDate: " date("r") . "nX-Mailer: PHP SmartMailnMime-Version: 1.0nContent-Type: text/plain; charset=iso-8859-1nContent-Transfer-Encoding: 8bitnn$bodyn");
          }
        }
        
        
$this->success lang("succ_send");
      } else 
$this->error "- " implode("<br />- ",$errors);
    }
    
    
    
    
/** handle message content **/
    
function messtype($structure) {
      if (!
$structure) return "TEXT/PLAIN";
      else {
        
$prim = array("TEXT","MULTIPART","MESSAGE","APPLICATION","AUDIO","IMAGE","VIDEO","OTHER");    //http://de3.php.net/manual/de/function.imap-fetchstructure.php
        
if($structure->subtype) { //ALTERNATIVE, PLAIN, REPORT, HTML,  ...
          
return $prim[intval($structure->type)] . "/" .$structure->subtype;
        } else return 
"TEXT/PLAIN";
      }
    }
    
    function 
get_part($m$mime_type$structure false,$part false) {
         if(!
$structure) {
             
$structure imap_fetchstructure($this->connection$m);
         }
         if(
$structure) {
        if(
$mime_type == $this->messtype($structure)) {
          if(!
$part$part "1"//key of 1st part
          
$text imap_fetchbody($this->connection$m$part);

          if(
$structure->encoding == 3) {         //http://de3.php.net/manual/de/function.imap-fetchstructure.php
            
$text imap_base64($text);
          } elseif(
$structure->encoding == 4) {         //http://de3.php.net/manual/de/function.imap-fetchstructure.php
            
$text imap_qprint($text);
          } else {
            
$text $text;
          }
          
//check charset
          
if (is_array($structure->parameters)) {
            if (
$structure->parameters[0]->value == "utf-8") {
              
$this->decode "UTF8";
              
$text utf8_decode($text);
            }
          }
          return 
$text;
        }
       
      if(
$structure->type == 1/* multipart */ {                               //http://de3.php.net/manual/de/function.imap-fetchstructure.php
        
while(list($key$sub_structure) = each($structure->parts)) {
          if(
$part) {  //enlarge part
            
$part .= ".";
          }
          
$data $this->get_part($m$mime_type$sub_structure,$part . ($key 1));
          if(
$data) {
            return 
$data;
          }
        }
      }
    }
    return 
false;
  }

}




?>
Онлайн: 0
Реклама