Email mit PDF als Anhang verschicken

Moleman

Erfahrenes Mitglied
Hallo,
seit Tagen versuche ich für den Typo3 Backend ein Script zu schreiben, welches eine PDF-Datei mit Inhalten aus der Datenbank erstellt und diese dann zusammen mit einer Mail verschickt. So nun habe ich folgenden Quellcode zum abschicken der Mail geschrieben:

PHP:
<?php
unset($MCONF);
require_once('conf.php');
require_once($BACK_PATH.'init.php');
require_once($BACK_PATH.'template.php');		

		$boundary = "einsehrlangerstring";
		
		$header = "MIME-Version: 1.0
		Content-Type: multipart/mixed; boundary=\"$boundary\"
		X-Priority: 3 (Normal)
		From: Deinname <heinzi@gmx.de>
		Return-Path: <heinzi2@gmx.de>
		Reply-to: <heinzi2@gmx.de>";
		
		$mailtext = "--$boundary
		Content-Type: text/plain; charset=\"us-ascii\"
		Content-Transfer-Encoding: 7bit

		hier kannst du den mailtext einfügen...

		--$boundary
		Content-Type: application/pdf; name=\"Anhang.pdf\"
		Content-Transfer-Encoding: base64
		Content-Disposition: attachment; filename=\Anhang.pdf\"

		".$_POST['pdf']."

		--$boundary--
		";

		$ok = @mail($_POST['email'],$_POST['betreff'],$mailtext,$header);
		
		if($ok) {
    	echo "Versand erfolgreich abgeschlossen!";
		} else {
    	die("Konnte die Mail nicht versenden");
}

?>

Die PDF habe ich bereits vorher erstellen lassen und in einem Formular versteckt mitgeschickt. Nun zeigt er mir jedes Mal wenn ich die Email mit Anhang versendet habe an, dass der Versand erfolgreich war. Allerdings wird die eMail einfach nicht verschickt. Woran liegt das?
 
Ok,
das er die Mail verschickt, habe ich nun hinbekommen. Allerdings habe ich nun das Problem, das der Anhang nicht mitgeschickt wird.
Kann mir da jemand helfen?
 
Für e-Mail Sachen jeglicher Art kann ich DIr folgende Klasse empfehlen:

http://phpmailer.sourceforge.net/

Super einfach zu bedienen und bietet alles, was man braucht.
AUch HTML-TExt....Anhänge uvm...

Probier sie aus - und du wirst nie wieder anders e-Mails mit PHP verschicken wollen :-)

Bei Fragen - frag mich :)

Grüsse,
maeg
 
Super, danke schon einmal jetzt!

ich habe es jetzt mit dem Phpmailer hinbekommen, das die email mit anhang verschickt wird. Allerdings ist der Anhang fehlerhaft uns lässt sich nicht öffnen.
Hier der Quellcode, der die PDF erstellt und codiert:
PHP:
[...]
$pdf->SetFont('Arial'); 
        $pdf->SetTextColor(0,0,0); 
        $pdf->SetXY(10, 35); 
        $pdf->Write(5, "Hallo ".$ud['name'].",\nSchön, dass du dich angemeldet hast für ".$seminar['title']." - ".$seminar['teaser']."!\n".$seminar['description']."\n\nAdresse: ".$ud['address']."\nVorlieben: ".$ud['comments']);
        $pdftext = $pdf->Output('newpdf.pdf', 'S');
        $pdftext = base64_encode($pdftext);
[...]
echo "<input type=\"hidden\" name=\"pdf\" value=\"".$pdftext."\">";
[...]

Dann das versandformular, welches den erstellten string mit abschicken soll:
PHP:
$mail = new PHPMailer();

        $mail->From     = "administrator@admin.de";
        $mail->FromName = "Dein - Team";
        $mail->IsSMTP();
        $mail->Host     = "localhost";
        $mail->SMTPAuth = true;
        $mail->Username = "user";
        $mail->Password = "passwort";
        $mail->Mailer   = "smtp";


        // HTML body
        $body  = "Hello <font size=\"4\"></font>, <p>";
        $body .= "".$_POST['inhalt']." message.<p>";
        $body .= "Sincerely, <br>";
        $body .= "PHPMailer List manager";

        // Plain text body (for mail clients that cannot read HTML)
        $text_body  = "Hello, \n\n";
        $text_body .= "".$_POST['inhalt']."Your personal photograph to this message.\n\n";
        $text_body .= "Sincerely, \n";
        $text_body .= "PHPMailer List manager";

        $mail->Body    = $body;
        $mail->AltBody = $text_body;
        $mail->AddAddress("tester@test.de", "Heinz");
        $mail->AddStringAttachment($_POST['pdf'], "newpdf.pdf");

            if(!$mail->Send())
               echo "There has been a mail error sending to tester@owgh.de <br>";

        // Clear all addresses and attachments for next loop
        $mail->ClearAddresses();
        $mail->ClearAttachments();

Kannst du mir sagen, wo der Fehler beim Versenden liegt?
 
OK,
ich habe das Problem nun doch selbst gelöst bekommen. Damit der nächste der dieses Problem bekommt, nicht wie ich endlos danach suchen muss, hier die richtigen Quellcodes:
PHP:
        $mail = new PHPMailer();

        $string = $_POST['pdf'];
	$string = base64_decode($string);
	$filename  = "Bestätigung.pdf";

        $mail->From     = "administrator@admin.de";
        $mail->FromName = "Dein - Team";
        $mail->IsSMTP();
        $mail->Host     = "localhost";
        $mail->SMTPAuth = true;
        $mail->Username = "user";
        $mail->Password = "passwort";
        $mail->Mailer   = "smtp";


        // HTML body
        $body  = "Hello <font size=\"4\"></font>, <p>";
        $body .= "".$_POST['inhalt']." message.<p>";
        $body .= "Sincerely, <br>";
        $body .= "PHPMailer List manager";

        // Plain text body (for mail clients that cannot read HTML)
        $text_body  = "Hello, \n\n";
        $text_body .= "".$_POST['inhalt']."Your personal photograph to this message.\n\n";
        $text_body .= "Sincerely, \n";
        $text_body .= "PHPMailer List manager";

        $mail->Body    = $body;
        $mail->AltBody = $text_body;
        $mail->AddAddress("tester@test.de", "Heinz");
        $mail->AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream');

            if(!$mail->Send())
               echo "There has been a mail error sending to tester@owgh.de <br>";

        // Clear all addresses and attachments for next loop
        $mail->ClearAddresses();
        $mail->ClearAttachments();

In der Versandfunktion, muss einmal der codierte string erneut dekodiert werden ($string = base64_decode($string); ) und anschließend mit folgender AddStringAttachment-Funktion verschickt werden: $mail->AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream'); !

Vielleicht hilft es irgendwann mal jemanden!

Gruß
Moleman
 
Zurück