2016-04-28 7 views
-1

Ich verwende den folgenden Code und es funktioniert. Der angehängte Code funktioniert jedoch nicht, und das Senden von E-Mails ist fehlgeschlagen. Könnte es mit dem falschen Header zu tun haben?Ich versuche, Formulardaten an pdf zu senden und an die Mail anzuhängen

Hier wird die $htmlTable Variable für das Sammeln von Formular-Post-Wert und das Umwandeln in PDF mit der HTML-zu-PDF-Funktion verwendet. Aber die Mail wird nicht mit PDF gesendet.

$pdf->WriteHTML2("<br><br><br>$htmlTable"); 
$pdf->SetFont('Arial','B',6); 
//Create PDF file with data 
$semi_rand = md5(time()); 
$pdf1 = $htmlTable; 

$file = $semi_rand . ".pdf"; 
$handle = fopen($file, 'w+'); 
fwrite($handle, $pdf); 
fclose($handle); 
// Additional headers 
    $subject = "User Form"; 
    $content = chunk_split(file_get_contents($file)); 
     $uid = md5(uniqid(time())); //unique identifier 

     //standard mail headers 
     $header = "From: ".$from."\r\n"; 
     $header .= "Reply-To: ".$_POST['email']. "\r\n"; 
     $header .= "MIME-Version: 1.0\r\n"; 


     //declare multiple kinds of email (plain text + attch) 
     $header .="Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
     $header .="This is a multi-part message in MIME format.\r\n"; 

     //plain txt part 

     //$header .= "--".$uid."\r\n"; 
    // $header .= "Content-type:text/plain; charset=iso-8859-1\r\n"; 
    // $header .= "Content-Transfer-Encoding: bit\r\n\r\n"; 
     //$header .= 'sample'. "\r\n\r\n"; 


     //attch part 
     $header .= "--".$uid."\r\n"; 
     $header .= "Content-Type: application/octet-stream; name=\"".$file."\"\r\n"; 
     $header .= "Content-Transfer-Encoding: base64\r\n"; 
     $header .= "Content-Disposition: attachment; filename=\"".$file."\"\r\n\r\n"; 
     $header .= $content."\r\n\r\n"; //chucked up 64 encoded attch 
     $success = mail($to,$subject,'PFA',$header); 
     if (!$success) { 
     echo "Mail to " . $to . " failed ."; 
     }else { 
     echo "Success : Mail was send to " . $to ; 
     print_r ($header); 
     } 
+1

Sie haben diese Frage mit [PHPMailer] (https://github.com/PHPMailer/PHPMailer) markiert, aber Sie verwenden sie nicht. Sie sollten, dann müssen Sie sich keine Gedanken darüber machen, wie Sie Anhänge richtig erstellen. Im Allgemeinen, lösen Sie ein Problem nach dem anderen - überprüfen Sie, ob Ihr PDF-Build funktioniert, bevor Sie versuchen, es zu senden. Schau dir auch 'file_put_contents' an, es ist viel einfacher als mit' fopen' zu fisten. – Synchro

+0

Ja, mein PDF-Build funktioniert, aber ich bekomme Probleme beim Senden von Anhang mit Mail ... – sourabh

+0

Wie funktioniert der "angehängte Code" und der "Code unten" funktioniert nicht? – symcbean

Antwort

2

sollten Sie PHPMailer Klasse verwenden, da es einfacher ist, eine Datei anhängen und sie per E-Mail senden.

Ein Beispiel für eine E-Mail mit Anhang versendet werden können:

<?php 
require 'PHPMailerAutoload.php'; 

$mail = new PHPMailer; 

//$mail->SMTPDebug = 3;        // Enable verbose debug output 

$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'smtp1.example.com'; // Specify main and backup SMTP servers 
$mail->SMTPAuth = true;        // Enable SMTP authentication 
$mail->Username = '[email protected]';     // SMTP username 
$mail->Password = 'secret';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 

$mail->setFrom('[email protected]', 'Mailer'); 
$mail->addAddress('[email protected]', 'Joe User'); 

$mail->addAttachment('/var/tmp/file.tar.gz');   // Add attachments 
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name 
$mail->isHTML(true);         // Set email format to HTML 

$mail->Subject = 'Attachment is here'; 
$mail->Body = 'Here goes the attachment; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 

Ich habe leicht modifiziert das Beispiel, das in der Verbindung gefunden werden kann, die ich oben geteilt haben.

Als Synchro schlug vor, Sie können addStringAttachment Methode verwenden, um das ganze Schreiben der PDF in einen Dateischritt zu überspringen und es direkt aus dem Speicher zu senden.

+1

Wenn Sie PHPMailer 'addStringAttachment' Methode verwenden, können Sie das ganze Schreiben der PDF zu a überspringen Datei Schritt und senden Sie es direkt aus dem Speicher. – Synchro

Verwandte Themen