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

Hallo,

irgendwie verstehe ich die Mail()-Funktion von PHP im Zusammenhang mit Anhängen nicht...
Kann mir jemand eine sichere Aussage machen, ob ich da (wie es hier steht: http://www.selfphp.info/funktionsreferenz/mail_funktionen/mail.php  )
tatsächlich nur ein Anhang mit verschicken kann?

Falls das Versenden von mehreren möglich ist, würde ich beinahe um ein Beispiel flehen - mach da schon seit Tagen dran rum...

Vielen Dank!!

  1. 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

    1. Hallo Christian!

      Zuerst mal VIELEN DANK, dass Du mir jetzt so ausgiebig weitergeholfen hast! DANKE!
      Jetzt weiss ich auch, wo ich wieder weiter den "fehler" suchen muss. OK, ich bin immer noch mit dem selben problem beschäftigt, hab aber schon viel dazu gelernt.

      Mein Problem damals war:
      Woher zum Geier nehme ich die Dateien Mail.php und Mail/mime.php?!?! War ja niergends beschrieben - oder ich war blind...
      Ich hab bei Puretec das größte Paket, bei dem auch PHP unterstützt wird... bei mir kam aber immer die fehlermeldung, dass er die beiden dateien nicht findet...

      Weisst Du dafür einen Lösungsansatz??

      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

      1. Hallo Jens,

        Mein Problem damals war:
        Woher zum Geier nehme ich die Dateien Mail.php und Mail/mime.php?!?! War ja niergends beschrieben - oder ich war blind...
        Ich hab bei Puretec das größte Paket, bei dem auch PHP unterstützt wird... bei mir kam aber immer die fehlermeldung, dass er die beiden dateien nicht findet...

        Weisst Du dafür einen Lösungsansatz??

        Die Dateien sind in dem PHP-ZIP-File mit drinnen, zusammen mit den anderen PEAR-Dateien. Geh' zu http://www.php.net/ und schnapp' Dir den neuesten Windows-ZIP-Download (nicht den Installer) und entpacke ihn. Dort gibt es ein Unterverzeichnis pear. Das lädst Du hoch und fügst es Deinem include-Path hinzu. (oder lädst die Dateien in das gleiche Verzeichnis wie Deine Scripte, ist aber nicht empfehlenswert) Den include-path kannst Du manuell auch auch mit ini_set vor dem include() setzen. Du brauchst aber nicht nur Mail.php und Mail/mime.php, sondern auch einige andere Dateien, daher lade lieber alles hoch.

        Grüße,

        Christian

        P.S.: Lerne bitte zu zitieren: </faq/#Q-09a>, http://learn.to/quote/