Guest User

RAWMailParser

a guest
Oct 24th, 2013
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php #RAW Mail Parser
  2. class RAWMailParser {
  3.     function __construct(){
  4.         //nastavení DateTime funkcí pro použití funkcí strtotime() a date()
  5.         date_default_timezone_set(@date_default_timezone_get());
  6.         return $this;
  7.     }
  8.     private $endl = "\r\n";
  9.     private $splitter = "\r\n\r\n";
  10.     private $ignoreLevel = 1;
  11.     private $headers = array();
  12.     private $sender = array();
  13.     private $recipient = array();
  14.     private $subject = '';
  15.     private $timestamp = 0;
  16.     private $message = array();
  17.     private $embeddedMessage = array();
  18.     private $embeddedHeades = array();
  19.     private $attachments = array();
  20.     private $attachmentsList = array();
  21.     private $inline = array();
  22.     private $inlineList = array();
  23.     private $log = array();
  24.     private $charset = 'utf-8';
  25.     private $typePriority = array('text/html', 'text/plain');
  26.    
  27.     //Methods:
  28.    
  29.     private function log($message, $level, $debug = false){
  30.         if($level > $this->ignoreLevel){
  31.             $message = "Warning (level $level): $message";
  32.             if($debug !== false){
  33.                 $message .= "\nDebug content: $debug";
  34.             }
  35.             if($this->charset != 'utf-8'){
  36.                 $message = iconv('utf-8', $this->charset, $message);
  37.             }
  38.             $this->log[] = $message;
  39.         }
  40.     }
  41.     private function writeToFile($filename, $content){
  42.         $file_handle = fopen($filename, 'w');
  43.         if(!$file_handle){
  44.             return false;
  45.         }
  46.         if(fwrite($file_handle, $content) === false){
  47.             return false;
  48.         }
  49.         fclose($file_handle);
  50.         return true;
  51.     }
  52.     private function parseHeader($header){
  53.         $headers = array();
  54.         $header_name = '';
  55.         foreach(explode($this->endl, $header) as $line){
  56.             if($line[0] == "\t" or $line[0] == " "){
  57.                 $headers[$header_name] .= PHP_EOL.$line;
  58.             }elseif(strpos($line, ':') !== false){
  59.                 list($header_name, $header_content) = explode(':', $line, 2);
  60.                 $header_name = strtolower($header_name);
  61.                 $header_content = trim($header_content);
  62.                 if(isset($headers[$header_name])){
  63.                     $headers[$header_name] .= $this->endl.$header_content;
  64.                 }else{
  65.                     $headers[$header_name] = $header_content;
  66.                 }
  67.             }else{
  68.                 $this->log('Jedna z hlaviček nemohla být zpracována.', 1, $line);
  69.             }
  70.         }
  71.         return $headers;
  72.     }
  73.     private function parseBody($body, $boundary = false, $embedded_message = false){
  74.         if($boundary){
  75.             //multipart mail
  76.             $body = explode('--'.$boundary, $body);
  77.         }else{
  78.             //jen zpráva
  79.             $body = array($body);
  80.         }
  81.         foreach($body as $part){
  82.             //základní kontrola
  83.             if(strpos($part, $this->splitter) === false){ // || strpos($part, "--\n") === 0){
  84.                 $this->log('Jedna z částí emailu byla zahozena, protože byla nejspíš neplatná - neobsahovala oddělovač.', 1, $part);
  85.                 continue;
  86.             }
  87.             //analyzování headeru
  88.             list($header, $content) = explode($this->splitter, $part, 2);
  89.             $headers = $this->parseHeader(ltrim($header));
  90.             //kontrola Content-Type
  91.             if(isset($headers['content-type'])){
  92.                 $content_type = $headers['content-type'];
  93.             }else{
  94.                 $this->log('Jedna z částí emailu byla zahozena, protože neobsahovala Content-Type hlavičku.', 2, $header);
  95.                 continue;
  96.             }
  97.             //kontrola Content-Transfer-Encoding
  98.             if(isset($headers['content-transfer-encoding'])){
  99.                 $encoding = $headers['content-transfer-encoding'];
  100.                 //dekódování obsahu
  101.                 if($encoding == 'quoted-printable'){
  102.                     $content = quoted_printable_decode($content);
  103.                 }elseif($encoding == 'base64'){
  104.                     $content = base64_decode($content);
  105.                 }
  106.             }
  107.             //uložení hlaviček
  108.             if(isset($headers['from']) && isset($headers['subject'])){
  109.                 if($embedded_message){
  110.                     $this->embeddedHeaders = array(
  111.                         'sender' => $this->getNamesAndEmails($headers['from'])[0],
  112.                         'subject' => iconv_mime_decode($headers['subject'], 0, $this->charset),
  113.                         'timestamp' => isset($headers['date']) ? strtotime($headers['date']) : 0
  114.                     );
  115.                 }else{
  116.                     //zjisti předmět zprávy
  117.                     $this->subject = iconv_mime_decode($headers['subject'], 0, $this->charset);
  118.                     //zjisti kdo je odesílatel a kdo je příjemce
  119.                     $this->sender = $this->getNamesAndEmails($headers['from'])[0];
  120.                     if(isset($headers['to'])){
  121.                         $this->recipient = $this->getNamesAndEmails($headers['to']);
  122.                     }
  123.                     //zjisti čas, kdy byl email odeslaný
  124.                     if(isset($headers['date'])){
  125.                         //date_default_timezone_set(@date_default_timezone_get());
  126.                         $this->timestamp = strtotime($headers['date']);
  127.                     }
  128.                     $this->headers = $headers;
  129.                 }
  130.             }
  131.             //zjištění typu
  132.             $strpos_slash = strpos($content_type, '/');
  133.             $type = substr($content_type, 0, $strpos_slash ? $strpos_slash : 0);
  134.             //text zprávy
  135.             if($type == 'text'){
  136.                 //zjisti znakovou sadu
  137.                 $message_charset = $this->getPropertyValue($content_type, 'charset');
  138.                 if($message_charset && $message_charset != $this->charset){
  139.                     $content = iconv($message_charset, $this->charset.'//ignore', $content);
  140.                 }
  141.                 //uložení zpracované zprávy
  142.                 if($embedded_message){
  143.                     //vložená zpráva emailu získaná z typu "message", asi původní zpráva před přeposláním
  144.                     $this->embeddedMessage[$this->getContentType($content_type)] = $content;
  145.                 }else{
  146.                     //zpráva
  147.                     $this->message[$this->getContentType($content_type)] = $content;
  148.                 }
  149.             }elseif($type == 'multipart' || $type == 'message'){
  150.                 //typ multipart nebo message/rfc822
  151.                 $this->parseBody($content, $this->getPropertyValue($content_type, 'boundary'), $type == 'message' ? true : $embedded_message);
  152.             }else{
  153.                 //příloha
  154.                 $inline = (isset($headers['content-id']) && $type == 'image'); //vloží jako inline jen obrázky
  155.                 $disposition = isset($headers['content-disposition']) ? $headers['content-disposition'] : '';
  156.                 //získání názvu souboru
  157.                 $filename_disposition = $this->getPropertyValue($disposition, 'filename');
  158.                 $filename_content_type = $this->getPropertyValue($content_type, 'name');
  159.                 if($filename_disposition){
  160.                     //název souboru získaný z disposition
  161.                     $filename = $filename_disposition;
  162.                 }elseif($filename_content_type){
  163.                     //název souboru získaný z content-type
  164.                     $filename = $filename_content_type;
  165.                 }else{
  166.                     //neznámý název souboru
  167.                     $this->log('Nepodařilo se zjistit název přílohy.', 2);
  168.                     $filename = 'Attachment('.$this->getContentType($content_type).')';
  169.                 }
  170.                 $filename = iconv_mime_decode($filename, 0, $this->charset);
  171.                 if($inline){
  172.                     $content_id = $headers['content-id'];
  173.                     if($content_id[0] == '<'){
  174.                         $content_id = substr($content_id, 1, -1);
  175.                     }
  176.                     //inline příloha (vložená do textu přes Content-Id)
  177.                     $this->inlineList[] = array(
  178.                         'filename' => $filename,
  179.                         'content-type' => $this->getContentType($content_type),
  180.                         'content-id' => $content_id,
  181.                         'size' => strlen($content)
  182.                     );
  183.                     $this->inline[] = $content;
  184.                 }else{
  185.                     //normální příloha
  186.                     $this->attachmentsList[] = array(
  187.                         'filename' => $filename,
  188.                         'content-type' => $this->getContentType($content_type),
  189.                         'content-id' => '<null>',
  190.                         'size' => strlen($content)
  191.                     );
  192.                     $this->attachments[] = $content;
  193.                 }
  194.             }
  195.         }
  196.     }
  197.     public function freeMemory(){
  198.         $empty_associative_array = array('name' => '', 'email' => '');
  199.         //vynulování proměnných
  200.         $this->headers = array();
  201.         $this->sender = $empty_associative_array;
  202.         $this->recipient = array($empty_associative_array);
  203.         $this->subject = '';
  204.         $this->timestamp = 0;
  205.         $this->message = array();
  206.         $this->embeddedMessage = array();
  207.         $this->embeddedHeaders = array('sender' => $empty_associative_array, 'subject' => '', 'timestamp' => 0);
  208.         $this->attachmentsList = array();
  209.         $this->attachments = array();
  210.         $this->inlineList = array();
  211.         $this->inline = array();
  212.         $this->log = array();
  213.         return $this;
  214.     }
  215.     public function load($raw_data){
  216.         $this->freeMemory();
  217.         //kontrola argumentu, jestli to není cesta k souboru
  218.         if(strlen($raw_data) < 100 && file_exists($raw_data)){
  219.             $raw_data = file_get_contents($raw_data);
  220.         }
  221.         $raw_data = ltrim($raw_data);
  222.         //zjisti, co je oddělovač - LF (\n) nebo CRLF (\r\n)
  223.         $this->endl = $raw_data[strpos($raw_data, "\n") - 1] == "\r" ? "\r\n" : "\n";
  224.         $this->splitter = $this->endl.$this->endl;
  225.         $this->parseBody($raw_data);
  226.         return true;
  227.     }
  228.     private function getPropertyValue($string, $property){
  229.         $property = $property.'=';
  230.         $strpos = strpos($string, $property);
  231.         if($strpos !== false){
  232.             $start = $strpos + strlen($property);
  233.             $end_by_quote = strpos($string, '"', $start + 1);
  234.             $end_by_semicolon = strpos($string, ';', $start);
  235.             $length = ($end_by_quote !== false ? $end_by_quote + 1 : ($end_by_semicolon !== false ? $end_by_semicolon : strlen($string))) - $start;
  236.             return trim((substr($string, $start, $length)), '\'"');
  237.         }
  238.         return false;
  239.     }
  240.     public function getNamesAndEmails($header){
  241.         $names_and_emails = array();
  242.         foreach(explode(',', $header) as $email_data){
  243.             if(strpos($email_data, '<') === false){
  244.                 $name = '';
  245.                 //$name = false;
  246.                 $email = $email_data;
  247.             }else{
  248.                 list($name, $email) = explode('<', $email_data);
  249.                 $name = trim(iconv_mime_decode($name, 0, $this->charset), '"\' ');
  250.                 /*if(empty($name)){
  251.                     $name = false;
  252.                 }*/
  253.                 $email = substr($email, 0, -1);
  254.             }
  255.             if(!$this->validateEmail($email)){
  256.                 if($this->ignoreLevel < 2){
  257.                     $this->log('Email není ve správném formátu.', 2, $email);
  258.                     //$email = false;
  259.                 }
  260.             }
  261.             $names_and_emails[] = array(
  262.                 'name' => $name,
  263.                 'email' => $email
  264.             );
  265.         }
  266.         if(empty($names_and_emails)){
  267.             $this->log('Nepodařilo se zjistit žádný email', 2);
  268.             //return false;
  269.             $names_and_emails = array(array('', ''));
  270.         }
  271.         return $names_and_emails;
  272.     }
  273.     private function getContentType($content_type){
  274.         $semicolon = strpos($content_type, ';');
  275.         return substr($content_type, 0, $semicolon ? $semicolon : strlen($content_type));
  276.     }
  277.     public function validateEmail($email){
  278.         return preg_match('/[a-z0-9\.\-\_]+@[a-z\.\-\_]+\.[a-z]{2,4}/', strtolower($email));
  279.     }
  280.    
  281.     //Get Methods
  282.    
  283.     public function getHeaders(){
  284.         return $this->headers;
  285.     }
  286.     public function getSender(){
  287.         return $this->sender;
  288.     }
  289.     public function getRecipient(){
  290.         return $this->recipient;
  291.     }
  292.     public function getSubject(){
  293.         return $this->subject;
  294.     }
  295.     public function getDate($format = 'U', $timestamp = false){
  296.         return date($format, $timestamp ? $timestamp : $this->timestamp);
  297.     }
  298.     public function getMessage($type = false, $embeddedMessage = false){
  299.         $message = $embeddedMessage !== false ? $embeddedMessage : $this->message;
  300.         if(empty($message)){
  301.             if($embeddedMessage === false){
  302.                 $this->log('Žádná zpráva není k dispozici. Nejspíš ještě email nebyl zpracován, nebo se při zpracovávání nepodařilo zprávu zachytit, a nebo už byla zpráva smazána (paměť už byla uvolněna).', 2);
  303.             }
  304.             return false;
  305.         }
  306.         if($type && isset($message[$type])){
  307.             return $message[$type];
  308.         }elseif($this->ignoreLevel > 1 || !$type){
  309.             //zkus vrátit typ podle nastavené priority
  310.             foreach($this->typePriority as $type){
  311.                 if(isset($message[$type])){
  312.                     return $message[$type];
  313.                 }
  314.             }
  315.             //vrať zprávu v jakémkoliv typu
  316.             return current($message);
  317.         }
  318.         //nepodařilo se najít vhodný typ
  319.         $this->log('Nepodařilo se najít zprávu v požadovaném typu, můžete zkusit povolit vrácení zprávy v jiném dostupném typu nastavením úrovně ignorování chyb na 2.', 2);
  320.         return false;
  321.     }
  322.     public function getEmbeddedMessage($type = false){
  323.         return $this->getMessage($type, $this->embeddedMessage);
  324.     }
  325.     public function getEmbeddedHeaders(){
  326.         return $this->embeddedHeaders;
  327.     }
  328.     public function getAttachmentsList($inline = false){
  329.         return $inline ? $this->inlineList : $this->attachmentsList;
  330.     }
  331.     public function getAttachment($pointer, $inline = false){
  332.         $attachments = $inline ? $this->inline : $this->attachments;
  333.         if(isset($attachments[$pointer])){
  334.             return $attachments[$pointer];
  335.         }else{
  336.             $this->log('Příloha s takovýmto ukazatelem nebyla nalezena', 2, $pointer);
  337.             return false;
  338.         }
  339.     }
  340.     public function saveAttachments($directory){
  341.         //kontrola adresáře
  342.         if(is_dir($directory)){
  343.             //kontrola jestli je adresář prázdný
  344.             $dir_handle = opendir($directory);
  345.             while($file = readdir($dir_handle)){
  346.                 if($file != '.' && $file != '..'){
  347.                     $this->log('Adresář není prázdný -> mohlo by to způsobit kolizi.', 3);
  348.                     if($this->ignoreLevel < 1){
  349.                         return false;
  350.                     }
  351.                     break;
  352.                 }
  353.             }
  354.             closedir($dir_handle);
  355.         }else{
  356.             if(!mkdir($directory)){
  357.                 $this->log('Adresář se nepodařilo vytvořit', 3);
  358.                 return false;
  359.             }
  360.         }
  361.         $attachments_list = array();
  362.         //ukládání příloh
  363.         foreach(
  364.             array(
  365.                 'inline' => $this->inlineList,
  366.                 'attachment' => $this->attachmentsList
  367.             ) as $disposition => $attachment
  368.         ){
  369.             $path = $directory.$disposition;
  370.             $attachments_info = array();
  371.             for($i = 0; $i < count($attachment); $i++){
  372.                 $log = 'Paměť s přílohami už byla nejspíš vyčištěna (přílohy byly uloženy do souborů) nebo se vyskytla neznámá chyba. Nejspíš bude třeba email znovu zpracovat.';
  373.                 if($disposition == 'inline'){
  374.                     //získání vložené přílohy
  375.                     if(isset($this->inline[$i])){
  376.                         $content = &$this->inline[$i];
  377.                     }else{
  378.                         $this->log($log, 2);
  379.                         return false;
  380.                     }
  381.                 }else{
  382.                     //získání normální přílohy
  383.                     if(isset($this->attachments[$i])){
  384.                         $content = &$this->attachments[$i];
  385.                     }else{
  386.                         $this->log($log, 2);
  387.                         return false;
  388.                     }
  389.                 }
  390.                 $attachments_info[] = implode('|', $attachment[$i]);
  391.                 //uložení přílohy
  392.                 if(!$this->writeToFile($path.$i, $content)){
  393.                     $this->log('Nepodařilo se vytvořit soubor pro některou z příloh.', 3);
  394.                     return false;
  395.                 }
  396.             }
  397.             $attachments_list[$disposition] = implode("\n", $attachments_info);
  398.         }
  399.         //uložení informací o přlohách
  400.         if(!$this->writeToFile($directory.'attachmentsList', implode("\n", $attachments_list))){
  401.             $this->log('Nepodařilo se zapsat seznam příloh do souboru.', 3);
  402.             return false;
  403.         }
  404.         //vyčištění paměti s přílohami
  405.         $this->attachments = array();
  406.         $this->inline = array();
  407.         return true;
  408.     }
  409.     public function getProcessedData(){
  410.         return array(
  411.             $this->recipient,           //Příjemce
  412.             $this->sender,              //Odesílatel
  413.             $this->subject,             //Předmět
  414.             $this->timestamp,           //Časový otisk
  415.             $this->getHeaders(),        //Hlavičky
  416.             $this->getMessage(),        //Zpráva
  417.             $this->getAttachmentsList(),//Seznam příloh
  418.             $this->getContentType($this->headers['content-type']) //Typ
  419.         );
  420.     }
  421.     public function getProcessLog($as_array = false){
  422.         return $as_array ? $this->log : implode("\n", $this->log);
  423.     }
  424.     public function getSavedList($directory){
  425.         $list = @file_get_contents($directory.'attachmentsList');
  426.         if(!$list){
  427.             return false;
  428.         }      
  429.         $attachments = array(
  430.             'inline' => array(),
  431.             'attachments' => array()
  432.         );
  433.         $index = 'inline';
  434.         $keys = array('filename', 'content-type', 'content-id', 'size');
  435.         foreach(explode("\n", $list) as $line){
  436.             if(empty($line)){
  437.                 $index = 'attachments';
  438.                 continue;
  439.             }
  440.             $attachments[$index][] = array_combine($keys, explode('|', $line));
  441.         }
  442.         return $attachments;
  443.     }
  444.     public function getPathToAttachment($directory, $disposition, $number){
  445.         $path = $directory.$disposition.$number;
  446.         if(file_exists($path)){
  447.             return $path;
  448.         }else{
  449.             $this->log('Nepodařilo se najít požadovaný soubor.', 3);
  450.             return false;
  451.         }
  452.     }
  453.  
  454.     //Set Methods
  455.    
  456.     public function setIgnoreLevel($level){
  457.         $this->ignoreLevel = intval($level);
  458.         return $this;
  459.     }
  460.     public function setCharset($charset){
  461.         $this->charset = strtolower($charset);
  462.         return $this;
  463.     }
  464.     public function setTypePriority($priority){
  465.         $this->typePriority = (array)$priority;
  466.         return $this;
  467.     }
  468.    
  469.     //Debug method
  470.    
  471.     public function debug(){
  472.         var_dump(
  473.             $this->headers,
  474.             $this->sender,
  475.             $this->recipient,
  476.             $this->subject,
  477.             $this->getDate('d.m.Y H:i:s'),
  478.             $this->getMessage(),
  479.             $this->getAttachmentsList(),
  480.             $this->log
  481.         );
  482.     }
  483. }
  484. /*
  485. RAWMailParser
  486.     Construct:
  487.    
  488.     public function __construct
  489.    
  490.     Proměnné:
  491.    
  492.     private $endl
  493.     private $splitter
  494.     private $headers
  495.     private $sender
  496.     private $recipient
  497.     private $timestamp
  498.     private $subject
  499.     private $message
  500.     private $embeddedMessage
  501.     private $embeddedHeaders
  502.     private $attachmentsList
  503.     private $attachments
  504.     private $inlineList
  505.     private $inline
  506.     private $ignoreLevel
  507.     private $typePriority
  508.     private $log
  509.     private $charset
  510.    
  511.     Methods:
  512.    
  513.     private function log
  514.     private function writeToFile
  515.     private function parseHeader
  516.     private function parseBody
  517.     private function getPropertyValue
  518.     private function getContentType
  519.     public function freeMemory
  520.     public function load
  521.     public function validateEmail
  522.     public function getNamesAndEmails
  523.     public function getHeaders
  524.     public function getSubject
  525.     public function getSender
  526.     public function getRecipient
  527.     public function getDate
  528.     public function getMessage
  529.     public function getattachmentsList
  530.     public function getAttachment
  531.     public function saveAttachments
  532.     public function getSavedList
  533.     public function getPathToAttachment
  534.     public function getProcessedData
  535.     public function setCharset
  536.     public function setIgnoreLevel
  537.     public function setTypePriority
  538.  
  539.     Popis metod (public):
  540.    
  541.         freeMemory
  542.             Description: vyčistí paměť (přepíše zprávu, přílohy, hlavičky a další proměnné použité při zpracovávání na prázdný řetězec nebo na prázdné pole) / nastavení nechává takové, jaké bylo (nepřepisuje na výchozí hodnoty)
  543.             Return:      $this (object)
  544.        
  545.         load
  546.             Argument: RAW Data nebo cesta k souboru (string)
  547.             Return:   $this (object)
  548.        
  549.         validateEmail
  550.             Argument: email na kontrolu (string)
  551.             Return:   true jestli prošel, false jestli ne (boolean)   
  552.  
  553.         getNamesAndEmails
  554.             Argument: obsah hlavičky s emaily, například z "from", "to" nebo "bcc" atd... (string)
  555.             Return:   jména a emaily (pokud nebylo možné zjistit jméno, tak se místo jména vrátí false, nebo pokud email neprojde validací, tak se místo emailu vrátí false v prvku pole) (array(associative array(keys: 'name', 'email')) //asociativní pole vnořené v poli
  556.        
  557.         getHeaders
  558.             Return: hlavičky emailu (associative array, keys: headers names in lowercase - "from", "to", "date", "subject", "content-type", "received"...)
  559.        
  560.         getSubject
  561.             Return: předmět emailu (string)
  562.            
  563.         getSender
  564.             Return: jméno a email odesítalele (associative array, keys: 'name', 'email')
  565.        
  566.         getRecipients
  567.             Return: jména a emaily příjemců (nebo příjemce, jestli byl jen jeden) (array(associative array, keys: 'name', 'email'))
  568.        
  569.         getDate
  570.             Argument: formát funkce date(), (výchozí "U" - timestamp) (string)
  571.             Argument: timestamp z vloženého emailu message/rfc822 (nepovinný argument, výchozí je timestamp získaný z hlavičky emailu) (int)
  572.             Return:   datum a čas zformátovaný podle argumentu (string)
  573.        
  574.         getMessage
  575.             Argument: typ ve kterém má být zpráva vrácena (např.: "text/html" - v případě, že zpráva tohoto typu nebude k dispozici, vrátí se v nejbližším preferovaným typu) (string)
  576.             Return:   zpráva (string) nebo false (boolean) při neúspěchu
  577.        
  578.         getEmbeddedMessage
  579.             Argument: typ, funguje stejně jako u getMessage (string)
  580.             Return:   vložená zpráva (nejspíš původní zpráva před přeposláním) (string) nebo false (boolean) při neúspěchu
  581.        
  582.         getEmbeddedHeaders
  583.             Return: odesílatel, předmět a čas odeslání vloženého emailu (nejspíš původní zprávy před přeposláním) (associative array, keys: 'sender' (associative array, keys: 'name', 'email'), 'subject' (string), 'timestamp' (int))
  584.        
  585.         getAttachmentsList
  586.             Argument: vrátit z normálních příloh nebo z vložených (inline)? (nepovinný, výchozí z normálních) (boolean)
  587.             Return:   seznam příloh a informace o nich (název souboru, typ, content-id, velikost souboru) (associative array, keys: 'filename', 'content-type', 'content-id', 'size')
  588.  
  589.         getAttachment
  590.             Argument: ukazatel přílohy - získaný z getAttachmentsList (int)
  591.             Argument: vrátit z normálních příloh nebo z vložených (inline)? (nepovinný, výchozí z normálních) (boolean)
  592.             Return:   dekódovaný obsah přílohy (string - většinou hodně dlouhý)
  593.        
  594.         getProcessedData
  595.             Return: pole se zpracovanými daty (array [0]=>příjemce, [1]=>odesílatel, [2]=>předmět, [3]=>časové razítko, [4]=>zpráva, [5]=>seznam příloh, [6]=>typ emailu)
  596.        
  597.         getProcessLog
  598.             Argument: vrátit jako pole? (boolean)
  599.             Return:   log s varováními vygenerovanými při zpracovávání (array | string)
  600.        
  601.         getSavedList
  602.             Argument: adresář, ve kterém jsou přílohy uloženy (s lomítkem na konci)
  603.             Return:   asociativní pole s informacemi o přílohách uložených v zadaném adrešáři (associative array, keys: 'inline' => (associative array, keys: 'filename', 'content-type', 'content-id', 'size'), 'attachments' => (associative array, keys: same as previous))
  604.        
  605.         getPathToAttachment
  606.             Argument: adresář, ve kterém jsou přílohy uloženy (s lomítkem na konci)
  607.             Argument: dispozice přílohy (vložená nebo normální -> 'inline' nebo 'attachment')
  608.             Argument: index v seznamu příloh (získaný z getSavedList)
  609.             Return:   cesta k příloze (pro uložení ke klientovi bude třeba přesvědčit prohlížeč že se příloha ve skutečnosti jmenuje tak, jak je to uložený v seznamu příloh, protože na server se ukládá ve tvaru directory/attachment0...)
  610.        
  611.         saveAttachments
  612.             Argument: cesta ke složce, do které mají být přílohy uloženy (bez lomítka na konci) (string)
  613.             Return:   true v případě, že uložení bylo úspěšné, false v případě že ne (boolean)
  614.     Do složky, kam se budou ukládat přílohy, by kvůli zabezpečení bylo dobrý vytvořit soubor .htacces a napsat do něj: deny from all
  615.     A pro každý email pak vytvořit složku pro přílohy (např. náhodně vygenerovanou, ale potom by to chtělo si pamatovat jak se jmenuje)
  616.            
  617.         setCharset
  618.             Argument: znaková sada, ve které mají být výstupní hodnoty (string)
  619.             Return:   $this (object)
  620.        
  621.         setIgnoreLevel
  622.             Argument: úroveň ignorování chyb (0 - logování všech varování, 1 - ignorování debug informací, 2 - ignorování základních varování, 3 - ignorování závažnějších varování) (int)
  623.             Return:   $this (object)
  624.  
  625.         setTypePriority
  626.             Argument: priorita typů pro hledání vhodného typu na vrácení zprávy emailu (array | string - přetypuje se na 1-elementové pole)
  627.             Return:   $this (object)
  628. */
  629. ?>
Add Comment
Please, Sign In to add comment