Mail Klassenreferenz

Aufstellung aller Elemente

Öffentliche Methoden

 Mail ($to, $text, $xy='')
 quoted_printable_encode ($text)
 setVar ($varName, $varInhalt)
 send ()
 sendSmtpCommand ($socket, $cmd)
 sendSmtpQuit ($socket)
 header_encode ($text)
 getMxHost ($to)

Öffentliche Attribute

 $from = ''
 $to = ''
 $bcc = ''
 $cc = ''
 $subject = ''
 $text = ''
 $header = array()
 $nl = ''
 $error = array()
 $debug = true


Ausführliche Beschreibung

Definiert in Zeile 40 der Datei Mail.class.php.


Dokumentation der Elementfunktionen

Mail::getMxHost ( to  ) 

Ermittelt den MX-Eintrag zu einer E-Mail-Adresse.
Es wird der Eintrag mit der h�chsten Priorit�t ermittelt.

Parameter:
String E-Mail-Adresse des Empf�ngers.
Rückgabe:
MX-Eintrag

Definiert in Zeile 472 der Datei Mail.class.php.

Benutzt $to.

Wird benutzt von send().

00473      {
00474           list($user,$host) = explode('@',$to.'@');
00475           
00476           if   ( empty($host) )
00477           {
00478                $this->error[] = 'Illegal mail address - No hostname found.';
00479                return "";
00480           }
00481                
00482           list($host) = explode('>',$host);
00483                     
00484           $mxHostsName = array();
00485           $mxHostsPrio = array();
00486           getmxrr($host,$mxHostsName,$mxHostsPrio);
00487           
00488           $mxList = array();
00489           foreach( $mxHostsName as $id=>$mxHostName )
00490           {
00491                $mxList[$mxHostName] = $mxHostsPrio[$id]; 
00492           }
00493           asort($mxList);
00494           return key($mxList);
00495      }

Mail::header_encode ( text  ) 

Umwandlung von 8-bit-Zeichen in MIME-Header gemaess RFC 2047.
Header d�rfen nur 7-bit-Zeichen enthalten. 8-bit-Zeichen m�ssen kodiert werden.

Parameter:
String $text
Rückgabe:
String

Definiert in Zeile 432 der Datei Mail.class.php.

Benutzt $conf, $text, Logger::error() und quoted_printable_encode().

Wird benutzt von Mail().

00433      {
00434           global $conf;
00435           
00436           if   ( empty($conf['mail']['header_encoding']) )
00437                return $text;
00438 
00439           $woerter = explode(' ',$text);
00440           $neu = array();
00441 
00442           
00443           foreach( $woerter as $wort )
00444           {
00445                $type     = strtolower(substr($conf['mail']['header_encoding'],0,1));
00446                $neu_wort = '';
00447                
00448                if   ( $type == 'b' )
00449                     $neu_wort = base64_encode($wort);
00450                elseif    ( $type == 'q' )
00451                     $neu_wort = $this->quoted_printable_encode($wort);
00452                else
00453                     Logger::error( 'Mail-Configuratin broken: UNKNOWN Header-Encoding type: '.$type);
00454 
00455                if   ( strlen($wort)==strlen($neu_wort) )
00456                     $neu[] = $wort;
00457                else
00458                     $neu[] = '=?'.lang('CHARSET').'?'.$type.'?'.$neu_wort.'?=';
00459           }
00460           
00461           return implode(' ',$neu);
00462      }

Mail::Mail ( to,
text,
xy = '' 
)

Konstruktor. Es werden folgende Parameter erwartet

Parameter:
String $to Empf�nger
String der Textschl�ssel
String unbenutzt.
Rückgabe:
Mail

Definiert in Zeile 76 der Datei Mail.class.php.

Benutzt $conf, $text, $to, header_encode() und lang().

00077      {
00078           global $conf;
00079           
00080           // Zeilenumbruch CR/LF gem. RFC 822.
00081           $this->nl = chr(13).chr(10);
00082           
00083           if   ( !empty($conf['mail']['from']) )
00084                $this->from = $this->header_encode($conf['mail']['from']);
00085 
00086           // Priorit�t definieren (sofern konfiguriert)
00087           if   ( !empty($conf['mail']['priority']) )
00088                $this->header[] = 'X-Priority: '.$conf['mail']['priority'];
00089                
00090           $this->header[] = 'X-Mailer: '.$this->header_encode(OR_TITLE.' '.OR_VERSION);
00091           $this->header[] = 'Content-Type: text/plain; charset='.lang( 'CHARSET' );
00092           $this->subject  = $this->header_encode(lang( 'mail_subject_'.$text ));
00093           $this->to       = $this->header_encode($to);
00094           
00095           $this->text = $this->nl.wordwrap(str_replace(';',$this->nl,lang('mail_text_'.$text)),70,$this->nl).$this->nl;
00096 
00097           // Signatur anhaengen (sofern konfiguriert)
00098           if   ( !empty($conf['mail']['signature']) )
00099           {
00100                $this->text .= $this->nl.'-- '.$this->nl;
00101                $this->text .= str_replace(';',$this->nl,$conf['mail']['signature']);
00102                $this->text .= $this->nl;
00103           }
00104           
00105           // Kopie-Empf�nger
00106           if   ( !empty($conf['mail']['cc']) )
00107                $this->cc = $this->header_encode($conf['mail']['cc']);
00108 
00109           // Blindkopie-Empf�nger
00110           if   ( !empty($conf['mail']['bcc']) )
00111                $this->bcc = $this->header_encode($conf['mail']['bcc']);
00112      }

Mail::quoted_printable_encode ( text  ) 

Kodiert einen Text in das Format "Quoted-printable".
See RFC 2045.

Parameter:
String $text Eingabe
Rückgabe:
Text im quoted-printable-Format

Definiert in Zeile 122 der Datei Mail.class.php.

Benutzt $text.

Wird benutzt von header_encode().

00123      {
00124           $text = str_replace(' ','=20',$text);
00125           
00126           for( $i=128; $i<=255; $i++ )
00127           {
00128                $text = str_replace( chr($i),'='.dechex($i),$text );
00129           }
00130           
00131           return $text;
00132      }

Mail::send (  ) 

Mail absenden. Die E-Mail wird versendet.

Rückgabe:
boolean Erfolg

Definiert in Zeile 151 der Datei Mail.class.php.

Benutzt $conf, getMxHost(), sendSmtpCommand() und sendSmtpQuit().

00152      {
00153           global $conf;
00154           
00155           // Header um Adressangaben erg�nzen.
00156           if   ( !empty($this->from ) )
00157                $this->header[] = 'From: '.$this->from;
00158           
00159           if   ( !empty($this->cc ) )
00160                $this->header[] = 'Cc: '.$this->cc;
00161           
00162           if   ( !empty($this->bcc ) )
00163                $this->header[] = 'Bcc: '.$this->bcc;
00164           
00165           // Mail versenden
00166           if   ( strtolower(@$conf['mail']['client']) == 'php' )
00167           {
00168                // PHP-interne Mailfunktion verwenden.
00169                $result = @mail( $this->to,                 // Empf�nger
00170                                 $this->subject,            // Betreff
00171                                 $this->text,               // Inhalt
00172                                 // Lt. RFC822 müssen Header mit CRLF enden. 
00173                                 // ABER: Der Parameter "additional headers" verlangt offenbar \n am Zeilenende.
00174                                 implode("\n",$this->header)  );
00175                if   ( !$result )
00176                     // Die E-Mail wurde nicht akzeptiert.
00177                     // Genauer geht es leider nicht, da mail() nur einen boolean-Wert
00178                     // zur�ck liefert.
00179                     $this->error[] = 'Mail was NOT accepted by mail()';
00180                     
00181                return $result;
00182           }
00183           else
00184           {
00185                // eigenen SMTP-Dialog verwenden.
00186                $smtpConf = $conf['mail']['smtp'];
00187                
00188                if   ( !empty($smtpConf['host']))
00189                {
00190                     // Eigenen Relay-Host verwenden.
00191                     $mxHost = $smtpConf['host'];
00192                     $mxPort = intval($smtpConf['port']);
00193                }
00194                else
00195                {
00196                     // Mail direkt zustellen.
00197                     $mxHost = $this->getMxHost($this->to);
00198                     
00199                     if   ( empty($mxHost) )
00200                     {
00201                          $this->error[] = "No MX-Entry found. Mail could not be sent.";
00202                          return false;
00203                     }
00204                     
00205                     if   ($smtpConf['ssl'])
00206                          $mxPort = 465;
00207                     else
00208                          $mxPort = 25;
00209                }
00210 
00211                
00212                if   ( !empty($smtpConf['localhost']))
00213                {
00214                     $myHost = $smtpConf['localhost'];
00215                }
00216                else
00217                {
00218                     $myHost = gethostbyaddr(getenv('REMOTE_ADDR'));
00219                }
00220                
00221                if   ( $smtpConf['ssl'])
00222                     $proto = 'ssl';
00223                else
00224                     $proto = 'tcp';
00225                
00226                //connect to the host and port
00227                $smtpSocket = fsockopen($proto.'://'.$mxHost,$mxPort, $errno, $errstr, intval($smtpConf['timeout']));
00228                
00229                if   ( !is_resource($smtpSocket) )
00230                {
00231                     $this->error[] = 'Connection failed to: '.$proto.'://'.$mxHost.':'.$mxPort.' ('.$errstr.'/'.$errno.')';
00232                     return false;
00233                }
00234                
00235                $smtpResponse = fgets($smtpSocket, 4096);
00236                if   ( $this->debug)
00237                     $this->error[] = trim($smtpResponse);
00238 
00239                if   ( substr($smtpResponse,0,3) != '220' )
00240                {
00241                     $this->error[] = trim($smtpResponse);
00242                     return false;
00243                }
00244 
00245                if   ( !is_resource($smtpSocket) )
00246                {
00247                     $this->error[] = 'Connection failed to: '.$smtpConf['host'].':'.$smtpConf['port'].' ('.$smtpResponse.')';
00248                     return false;
00249                }
00250                
00251                //you have to say HELO again after TLS is started
00252                $smtpResponse = $this->sendSmtpCommand($smtpSocket,'HELO '.$myHost);
00253 
00254                if   ( substr($smtpResponse,0,3) != '250' )
00255                {
00256                     $this->error[] = "No 2xx after HELO, server says: ".$smtpResponse;
00257                     $this->sendSmtpQuit($smtpSocket);
00258                     return false;
00259                }
00260 
00261                if   ( $smtpConf['tls'] )
00262                {
00263                     $smtpResponse = $this->sendSmtpCommand($smtpSocket,'STARTTLS');
00264                     if   ( substr($smtpResponse,0,3) == '220' )
00265                     {
00266                          // STARTTLS ist gelungen.
00267                          //you have to say HELO again after TLS is started
00268                          $smtpResponse = $this->sendSmtpCommand($smtpSocket,'HELO '.$myHost);
00269           
00270                          if   ( substr($smtpResponse,0,3) != '250' )
00271                          {
00272                               $this->error[] = "No 2xx after HELO, server says: ".$smtpResponse;
00273                               $this->sendSmtpQuit($smtpSocket);
00274                               return false;
00275                          }
00276                     }
00277                     else
00278                     {
00279                          // STARTTLS ging in die Hose. Einfach weitermachen.
00280                     }
00281                }
00282    
00283                // request for auth login
00284                if   ( isset($smtpConf['auth_username']) && !empty($smtpConf['host']) && !empty($smtpConf['auth_username']))
00285                {
00286                     $smtpResponse = $this->sendSmtpCommand($smtpSocket,"AUTH LOGIN");
00287                     if   ( substr($smtpResponse,0,3) != '334' )
00288                     {
00289                          $this->error[] = "No 334 after AUTH_LOGIN, server says: ".$smtpResponse;
00290                          $this->sendSmtpQuit($smtpSocket);
00291                          return false;
00292                     }
00293      
00294                     if   ( $this->debug)
00295                          $this->error[] = 'Login for '.$smtpConf['auth_username'];
00296                          
00297                     //send the username
00298                     $smtpResponse = $this->sendSmtpCommand($smtpSocket, base64_encode($smtpConf['auth_username']));
00299                     if   ( substr($smtpResponse,0,3) != '334' )
00300                     {
00301                          $this->error[] = "No 3xx after setting username, server says: ".$smtpResponse;
00302                          $this->sendSmtpQuit($smtpSocket);
00303                          return false;
00304                     }
00305                     
00306                     //send the password
00307                     $smtpResponse = $this->sendSmtpCommand($smtpSocket, base64_encode($smtpConf['auth_password']));
00308                if   ( substr($smtpResponse,0,3) != '235' )
00309                     {
00310                          $this->error[] = "No 235 after sending password, server says: ".$smtpResponse;
00311                          $this->sendSmtpQuit($smtpSocket);
00312                          return false;
00313                     }
00314                }
00315                
00316                //email from
00317                $smtpResponse = $this->sendSmtpCommand($smtpSocket, 'MAIL FROM: <'.$conf['mail']['from'].'>');
00318           if   ( substr($smtpResponse,0,3) != '250' )
00319                {
00320                     $this->error[] = "No 2xx after MAIL_FROM, server says: ".$smtpResponse;
00321                     $this->sendSmtpQuit($smtpSocket);
00322                     return false;
00323                }
00324                
00325                //email to
00326                $smtpResponse = $this->sendSmtpCommand($smtpSocket, 'RCPT TO: <'.$this->to.'>');
00327           if   ( substr($smtpResponse,0,3) != '250' )
00328                {
00329                     $this->error[] = "No 2xx after RCPT_TO, server says: ".$smtpResponse;
00330                     $this->sendSmtpQuit($smtpSocket);
00331                     return false;
00332                }
00333                
00334                //the email
00335                $smtpResponse = $this->sendSmtpCommand($smtpSocket, "DATA");
00336                if   ( substr($smtpResponse,0,3) != '354' )
00337                {
00338                     $this->error[] = "No 354 after DATA, server says: ".$smtpResponse;
00339                     $this->sendSmtpQuit($smtpSocket);
00340                     return false;
00341                }
00342  
00343                $this->header[] = 'To: '.$this->to;
00344                $this->header[] = 'Subject: '.$this->subject;
00345                $this->header[] = 'Date: '.date('r');
00346                $this->header[] = 'Message-Id: '.'<'.getenv('REMOTE_ADDR').'.'.time().'.openrat@'.getenv('SERVER_NAME').'.'.getenv('HOSTNAME').'>';
00347          
00348                 //observe the . after the newline, it signals the end of message
00349                $smtpResponse = $this->sendSmtpCommand($smtpSocket, implode($this->nl,$this->header).$this->nl.$this->nl.$this->text.$this->nl.'.');
00350           if   ( substr($smtpResponse,0,3) != '250' )
00351                {
00352                     $this->error[] = "No 2xx after putting DATA, server says: ".$smtpResponse;
00353                     $this->sendSmtpQuit($smtpSocket);
00354                     return false;
00355                }
00356 
00357                // say goodbye
00358                $this->sendSmtpQuit($smtpSocket);
00359                return true;
00360           }
00361      }

Mail::sendSmtpCommand ( socket,
cmd 
)

Sendet ein SMTP-Kommando zum SMTP-Server.

private

Parameter:
Resource $socket TCP/IP-Socket zum SMTP-Server
unknown_type $cmd SMTP-Kommando
Rückgabe:
Server-Antwort

Definiert in Zeile 372 der Datei Mail.class.php.

Wird benutzt von send().

00373      {
00374           if   ( $this->debug )
00375                $this->error[] = 'CLIENT: >>> '.trim($cmd);
00376           if   ( !is_resource($socket) )
00377           {
00378                // Die Verbindung ist geschlossen. Dies kann bei dieser
00379                // Implementierung eigentlich nur dann passieren, wenn
00380                // der Server die Verbindung schlie�t.
00381                // Dieser Client trennt die Verbindung nur nach einem "QUIT".
00382                $this->error[] = "Connection lost";
00383                return;
00384           }
00385           
00386           fputs($socket,$cmd.$this->nl);
00387           $response = trim(fgets($socket, 4096));
00388           if   ( $this->debug )
00389                $this->error[] = 'SERVER: <<< '.$response;
00390           return $response;
00391      }

Mail::sendSmtpQuit ( socket  ) 

Sendet ein QUIT zum SMTP-Server, wartet die Antwort ab und schlie�t danach die Verbindung.

Parameter:
Resource Socket

Definiert in Zeile 401 der Datei Mail.class.php.

Wird benutzt von send().

00402      {
00403           
00404           if   ( $this->debug )
00405                $this->error[] = "CLIENT: >>> QUIT";
00406           if   ( !is_resource($socket) )
00407                return;
00408                // Wenn die Verbindung nicht mehr da ist, brauchen wir
00409                // auch kein QUIT mehr :)
00410 
00411           
00412           fputs($socket,'QUIT'.$this->nl);
00413           $response = trim(fgets($socket, 4096));
00414           if   ( $this->debug )
00415                $this->error[] = 'SERVER: <<< '.$response;
00416                
00417           if   ( substr($response,0,3) != '221' )
00418                $this->error[] = 'QUIT FAILED: '.$response;
00419                
00420           fclose($socket);
00421      }

Mail::setVar ( varName,
varInhalt 
)

Setzen einer Variablen in den Mail-Inhalt.

Definiert in Zeile 139 der Datei Mail.class.php.

00140      {
00141           $this->text = str_replace( '{'.$varName.'}', $varInhalt, $this->text );
00142      }


Dokumentation der Datenelemente

Mail::$bcc = ''

Definiert in Zeile 44 der Datei Mail.class.php.

Mail::$cc = ''

Definiert in Zeile 45 der Datei Mail.class.php.

Mail::$debug = true

Definiert in Zeile 65 der Datei Mail.class.php.

Mail::$error = array()

Definiert in Zeile 57 der Datei Mail.class.php.

Mail::$from = ''

Definiert in Zeile 42 der Datei Mail.class.php.

Mail::$header = array()

Definiert in Zeile 48 der Datei Mail.class.php.

Mail::$nl = ''

Definiert in Zeile 49 der Datei Mail.class.php.

Mail::$subject = ''

Definiert in Zeile 46 der Datei Mail.class.php.

Mail::$text = ''

Definiert in Zeile 47 der Datei Mail.class.php.

Wird benutzt von header_encode(), Mail() und quoted_printable_encode().

Mail::$to = ''

Definiert in Zeile 43 der Datei Mail.class.php.

Wird benutzt von getMxHost() und Mail().


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei:

Erzeugt am Thu May 14 00:55:50 2009 für OpenRat von  doxygen 1.5.8