Christian Seiler: Verständnisproblem bei mail()-Funktion und Anhängen

Beitrag lesen

Hallo Jens,

irgendwie verstehe ich die Mail()-Funktion von PHP im Zusammenhang mit Anhängen nicht...

Die mail()-Funktion ist eine "rohe" Funktion, Du musst also die ganze Sache mit Mime-Codierung und alles andere selbst erledigen. Das ist fehleranfällig und sehr kompliziert. Ich habe Dir in </archiv/2002/10/27074/#m147586> die Klasse Mail_Mime empfohlen. Du hast gesagt, Du kommst mit der Doku nicht zurecht. Dabei ist die Klasse 1000000x einfacher, als der rohe Mime-Code.

Ganz am Ende der Doku stand ein Beispiel (ich hab' das jetzt mal rauskopiert) Die Dateien Mail.php und Mail/mime.php findest Du im pear-Unterverzeichnis Deiner PHP-Installation (wenn Du unter Windows arbeitest, musst Du Dir das ZIP-Paket holen, aber nachträglich nur die PEAR-Dateien da rausextrahieren geht auch)

------------------------------------------------------------------
include('Mail.php');
include('Mail/mime.php');

$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = '/home/richard/example.php';
$crlf = "\r\n";
$hdrs = array(
              'From'    => 'you@yourdomain.com',
              'Subject' => 'Test mime message'
              );

$mime = new Mail_mime($crlf);

$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =& Mail::factory('mail');
$mail->send('postmaster@localhost', $hdrs, $body);
------------------------------------------------------------------

Das gehen wir jetzt mal Schritt für Schritt durch:

include('Mail.php');
include('Mail/mime.php');

Das sagt nur, dass die Dateien eingebunden werden sollen.

$text = 'Text version of email';

Hier definierst Du den Textteil der Email.

$html = '<html><body>HTML version of email</body></html>';

Hier definierst Du den HTML-Teil der Email.

$file = '/home/richard/example.php';

Hier definierst den Dateinamen oder den Dateiinhalt. (ist egal)

$crlf = "\r\n";

Hier definierst Du das Zeilenumbruchzeichen - lass es so.

$hdrs = array(
              'From'    => 'you@yourdomain.com',
              'Subject' => 'Test mime message'
              );

Hier definierst Du die Header-Felder der Email.

$mime = new Mail_mime($crlf);

Hiermit instatierst Du ein neues Objekt der Klasse Mail_mime.

$mime->setTXTBody($text);

Hiermit legst Du den vorher definierten Text-Teil der Mail fest.

$mime->setHTMLBody($html);

Hiermit legst Du den vorher definierten HTML-Teil der Mail fest.

$mime->addAttachment($file, 'text/plain');

Hiermit fügst Du ein Attachment des Typs text/plain hinzu. Du kannst diese Funktion mehrmals für alle Deine Attachments aufrufen.

$body = $mime->get();

Hiermit holst Du Dir den kodierten Message-Body.

$hdrs = $mime->headers($hdrs);

Hiermit holst Du Dir die kodierten Message-Headers.

$mail =& Mail::factory('mail');

Hiermit erstellst Du eine Mail-Klasse, die selbst die Funktion mail benutzern wird.

$mail->send('postmaster@localhost', $hdrs, $body);

Hiermit schickst Du die Email an postmaster@localhost.

Das ist doch viel einfacher als Dein Code, also womit hattest Du da Dein Problem?

Grüße,

Christian