Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP7 mail() mit Anhang

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    PHP7 mail() mit Anhang

    Hallo!

    Wir arbeiten derzeit an der Umstellung auf PHP7. Nun haben wir ein Problem mit mail(), das einen Anhang versenden soll.

    Ich möchte gerne eine PDF-Datei, die mittels FPDF dyn. erzeugt wird und im Verzeichnis temp/ angelegt wird per E-Mail (PHP mail()) versenden.

    Die Datei wird korrekt erstellt und auch im Verzeichnis und temp/dateixyz.pdf gespeichert.

    Hier mein Skript:

    $dateiname = "dateixyz.pdf";
    $file = "temp/".$dateiname."";
    $file_name = "$dateiname";
    $from = "ic[email protected]";
    $to = "[email protected]";
    $cc = "[email protected]";
    $subject = "Ein Betreff";
    $text = "Hier ist der Text...\r\n";

    $boundary = md5(uniqid(time()));
    $header = "From: $from\r\n";
    $header .= "Reply-To: $from\r\n";
    $header .= "CC: $cc\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=$boundary\r\n";

    $emessage .= "This is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format\r\n";
    $emessage .= "--$boundary\r\n";
    $emessage .= "Content-Type: text/plain; charset=iso-8859-1\r\n";
    $emessage .= "Content-Transfer-Encoding: 8bit\r\n";
    $emessage .= "\r\n$text\r\n";
    $file_content = fread(fopen($file,"r"),filesize($file));
    $file_content = chunk_split(base64_encode($file_content));
    $emessage .= "--$boundary\r\n";
    $emessage .= "Content-Type: application/octet-stream; name="$file_name"\r\n";
    $emessage .= "Content-Transfer-Encoding: base64\r\n";
    $emessage .= "Content-Disposition: attachment; filename="$file_name"\r\n";
    $emessage .= "$file_content\r\n";
    $emessage .= "--$boundary--\r\n";

    if (mail($to,$subject,$emessage,$header))
    {
    echo "mail send ... OK"; // or use booleans here
    } else
    {
    echo "mail send ... ERROR!";
    $error = error_get_last();
    echo "\nERROR: " . $error["message"] ."\n";
    };
    Die E-Mail wird mit einer Datei, die den korrekten Dateinamen hat, versendet. Die Datei kann ich jedoch nicht öffnen. Acrobat "meckert", dass die Datei beschädigt oder nicht korrekt dekodiert wurde.

    Mag mir jemand auf die Sprünge helfen? Was ist mein Fehler?

    Herzlichen Dank und Gruß!
    maha

    #2
    Probier mal vor und nach dem $file_content einen doppelten Zeilenumbruch (\r\n\r\n).

    PS: Ich nutze für komplexere Mails ausschließlich den PHPMailer. Dieser ist extrem zuverlässlich.

    Kommentar


      #3
      Hallo HomerS,

      vielen Dank für Deine Antwort.

      Ich habe soeben
      $emessage .= "$file_content\r\n";
      zu
      $emessage .= "\r\n\r\n$file_content\r\n\r\n";
      geändert. Jetzt klappt es einwandfrei! Du hast mir sehr geholfen.

      Ja, den PHPMailer hatte ich auch schon nutzen wollen, für diesen "Spatzen"-Einsatz wäre es aber eine Kanone.

      Nochmals vielen Dank!
      maha

      Kommentar


        #4
        hat man die Kanone einmal im Griff, ist sie ganz schnell geladen und überall einsatzbereit 😀

        Kommentar


          #5
          Ich werde mir Deine Worte zu Herzen nehmen und mir die Funktion in den kommenden Tagen mal genauer anschauen. :-)

          Kommentar

          Lädt...
          X