Note that there are some explanatory texts on larger screens.

plurals
  1. POEmailing A Dynamically Created PDF Through PHP
    text
    copied!<p>I've recently created an online template for creating job postings for our website. Everything is all done, it formats correctly in a browser, automatically posts to our website, bla bla bla.</p> <p>The last piece I'm creating is to give the administrator a few options for distributing the posting to various places (via email) in a consistent, convenient way. I've created a PHP page that creates a PDF doc on the fly, using the TCPDF library. When loading pdf.php?id=X, the page displays a PDF with the content of job posting X. This means I'm never saving the PDF file to the server, just creating it on the fly each time it's called.</p> <p>But I want to attach this PDF to an email, and send it to various colleges, and internal mailing lists, etc. If I attach the pdf.php?id=x to the email, it doesn't attach the PDF, it attaches what appears to be a blank file, with the above name.</p> <p>Is it possible to attach this to the email without saving it to the server?</p> <hr> <p>Below added based on JM4's response for further trouble shooting. I have put the PDF file creation into a function, and put it into an include file, just to keep things easier to manage.</p> <pre><code>// random hash necessary to send mixed content $separator = md5(time()); $eol = PHP_EOL; // attachment name $filename = "_Desiredfilename.pdf"; include_once('pdf.php'); // encode data (puts attachment in proper format) $pdfdoc = job_posting_to_pdf($posting_id); $attachment = chunk_split(base64_encode($pdfdoc)); ///////////HEADERS INFORMATION//////////// // main header (multipart mandatory) message $headers = "From: Sender_Name&lt;valid_email@mydomain.com&gt;".$eol; //$headers .= "Bcc: email@domain.com".$eol; $headers .= "MIME-Version: 1.0".$eol; $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; $headers .= "Content-Transfer-Encoding: 7bit".$eol; $headers .= "This is a MIME encoded message.".$eol.$eol; // message $headers .= "--".$separator.$eol; $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol; $headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; $headers .= $message.$eol.$eol; // attachment $headers .= "--".$separator.$eol; $headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; $headers .= "Content-Transfer-Encoding: base64".$eol; $headers .= "Content-Disposition: attachment".$eol.$eol; $headers .= $attachment.$eol.$eol; $headers .= "--".$separator."--"; //Email message if(mail('valid_email@mydomain.com', 'test job posting', 'message body goes here', $headers)) { echo 'mail sent'; } else { echo 'error in email'; } </code></pre> <p>Here is a stripped down version of pdf.php:</p> <pre><code>function job_posting_to_pdf($job_id) { require_once(ROOT . 'assets/libs/tcpdf/config/lang/eng.php'); require_once(ROOT . 'assets/libs/tcpdf/tcpdf.php'); // create new PDF document $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // set document information $pdf-&gt;SetCreator(PDF_CREATOR); $pdf-&gt;SetAuthor(''); $pdf-&gt;SetTitle('OPL Job Posting'); $pdf-&gt;SetSubject('Job Posting'); $pdf-&gt;SetKeywords('TCPDF, PDF, example, test, guide'); // remove default header/footer $pdf-&gt;setPrintHeader(false); $pdf-&gt;setPrintFooter(false); // set default monospaced font $pdf-&gt;SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); //set margins $pdf-&gt;SetMargins(11, PDF_MARGIN_TOP, 11); //set auto page breaks $pdf-&gt;SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); //set image scale factor $pdf-&gt;setImageScale(PDF_IMAGE_SCALE_RATIO); //set some language-dependent strings $pdf-&gt;setLanguageArray($l); // --------------------------------------------------------- $pdf-&gt;SetFont('times', 'I', 9); $pdf-&gt;AddPage(); $left_cell_width = 60; $row_height = 6; $pdf-&gt;Image(ROOT . 'assets/gfx/logos/OPL-Logo.jpg', 0, 5, null, 16, null, null, 'N', false, null,'R'); $pdf-&gt;Ln('3'); if(!$row['internal']) { $pdf-&gt;Cell(0,0,'This position will be posted internally and externally, concurrently.',0,2,'C'); } else { $pdf-&gt;Cell(0,0,'Internal posting only.',0,2,'C'); } //Remainder of actual PDF creation removed to keep things simple return $pdf-&gt;Output("", "S"); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload