Home

E-Mails mit PHP versenden

Sonntag, 11. März 2007 | Autor: Pr0g

Fertige SendMail() Funktion

Abschließend nochmal die komplette Funktion mit ein paar Ergänzungen. Wurde nur ein normaler Text angegeben, so wird eine Text E-Mail verschickt. Bei Angabe von HTML eine HTML E-Mail und bei Angabe von beidem oder wenn Dateien angehangen werden sollen eine Multipart E-Mail.

Die Parameter $message_html und $attachment sind nun optional:

<?php

//
// E-Mail versenden
//
function SendMail($to$from$subject$message_text$message_html ''$attachment false$reply '') {
  
// Zeilenlänge der Textnachrichten auf 70 Zeichen beschränken
  
$message_text wordwrap($message_text70);

  
// Alle Zeilenumbrüche in den Nachrichten auf \n setzen
  
$message_text str_replace(array("\r\n""\r"), "\n"$message_text);
  
$message_html str_replace(array("\r\n""\r"), "\n"$message_html);

  
// Absender auf gültige E-Mailadresse prüfen
  
$from trim($from);
  if (!
preg_match('/^[\w.+-]{1,64}\@[\w.-]{1,255}\.[a-z]{2,6}$/'$from)) {
    return 
false;
  }

  
// Absender in Header schreiben
  
$header 'From: ' $from "\r\n";

  
// Antwortadresse falls vorhanden in Header schreiben
  
if (!empty($reply)) {
    
$header .= 'Reply-To: ' trim($reply) . "\r\n";
  }

  if (empty(
$message_html) && !is_array($attachment)) {
    
// Text E-Mail erstellen
    
$message $message_text;
  } elseif (empty(
$message_text) && !is_array($attachment)) {
    
// HTML E-Mail erstellen
    
$message $message_html;

    
// Content-Type auf HTML setzen
    
$header .= 'MIME-Version: 1.0' "\r\n"
             
'Content-Type: text/html; charset=iso-8859-1' "\r\n";
  } else {
    
// Multipart E-Mail erstellen

    // Zufallsid als Blocknamen erzeugen
    
$boundary_alternative md5(uniqid(time()));
    
$boundary_mixed = (is_array($attachment) ? md5(uniqid(time())) : $boundary_alternative);

    
// Content-type auf Multipart setzen
    
$header .= 'MIME-Version: 1.0' "\r\n"
             
'Content-Type: multipart/' . (is_array($attachment) ? 'mixed' 'alternative')
             . 
'; boundary="' $boundary_mixed '"' "\r\n";

    
// Wird in der Nachricht ein Text versendet?
    
$withtext = (!empty($message_text) || !empty($message_html));

    
// Unterblock anfügen
    
if (is_array($attachment) && $withtext) {
      
$message .= '--' $boundary_mixed "\n"
                
'Content-Type: multipart/alternative; boundary="' $boundary_alternative '"'
                
"\n\n";
    }

    
// Text Block anfügen
    
if (!empty($message_text)) {
      
$message .= '--' $boundary_alternative "\n"
                
'Content-Type: text/plain; charset=ISO-8859-1' "\n"
                
'Content-Transfer-Encoding: 8bit' "\n\n"
                
$message_text "\n\n";
    }

    
// HTML Block anfügen
    
if (!empty($message_html)) {
      
$message .= '--' $boundary_alternative "\n"
                
'Content-Type: text/HTML; charset=ISO-8859-1' "\n"
                
'Content-Transfer-Encoding: 8bit'"\n\n"
                
$message_html "\n\n";
    }

    
// Unterblock schließen
    
if ($withtext) {
      
$message .= '--' $boundary_alternative '--' "\n\n";
    }

    
// Dateien anhängen
    
if (is_array($attachment)) {
      
// Alle Dateieinträge durchlaufen
      
for ($i 0$i count($attachment); $i++) {
        
// Datei öffnen (binär lesend)
        
$fp fopen($attachment[$i]['filename'], 'rb');

        
// Inhalt auslesen
        
$filedata fread($fpfilesize($attachment[$i]['filename']));

        
// Datei schließen
        
fclose($fp);

        
// Daten in Base64 umwandeln
        
$filedata chunk_split(base64_encode($filedata));

        
// Daten an Nachricht anhängen
        
$message .= '--' $boundary_mixed "\n"
                  
'Content-Type: ' $attachment[$i]['filetype'] . ' name="'
                  
$attachment[$i]['newname'] . '"' "\n"
                  
'Content-Disposition: attachment; filename="'
                  
$attachment[$i]['newname'] . '"' "\n"
                  
'Content-Transfer-Encoding: base64' "\n\n"
                  
$filedata "\n\n";
      }

      
// Letzten Block abschließen
      
$message .= '--' $boundary_mixed '--';
    }
  }

  
// E-Mail versenden
  
return mail($to$subject$message$header);
}

?>

Zu guter Letzt kommt noch ein Schlusswort.

Seiten: 1 2 3 4 5 6 7 8 9 10

Tags » , , , , , «

Trackback: Trackback-URL | Feed zum Beitrag: RSS 2.0
Thema: Artikel

Diesen Beitrag kommentieren.

3 Kommentare

  1. Hi,

    Anhand dem folgenden Beispiel wird beschrieben, wie man mit dem phpmailer eine einfache E-Mail versenden kann. http://www.phptoast.de/e-mails-versenden-mit-php/233/

  2. Es ist sicher eine nette Alternative, aber auf das Absenden komplexerer Emails mit Dateianhängen geht das (recht kurze) Beispiel nicht ein. Kann die Klasse das überhaupt, eine Erwähnung der Funktionen wäre sicherlich noch nett :)

  3. Na klar kann man mit der Klasse auch Mails mit Anhang versenden. Das kannst du über folgende Funktion relaisieren: AddAttachment()

    Eine detaillierte Dokumentation findest du hier:
    http://phpmailer.codeworxtech.com/index.php?pg=methods

Kommentar abgeben