I recently created an online job posting template for our site. Everything is done, it is correctly formatted in the browser, it automatically sends bla bla bla to our website.
The last part that I create is to provide the administrator with several options for posting the publication in different places (via email) in a consistent, convenient way. I created a PHP page that creates a PDF document on the fly using the TCPDF library. When downloading pdf.php? Id = X The PDF file is displayed on the page with the contents of the X location. This means that I never save the PDF file on the server, just creating it on the fly every time it is called.
But I want to attach this PDF file to email and send it to various colleges, internal mailing lists, etc. Should I attach pdf.php? id = x to the email, it will not add the PDF file, it will attach what appears to be an empty file with the above name.
Is it possible to associate this with email without storing it on the server?
Below is added based on JM4's answer for further troubleshooting. I included the PDF file in the function and put it in the include file to simplify management.
// 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<valid_email@mydomain.com>".$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'; }
Here is a stripped down version of pdf.php:
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->SetCreator(PDF_CREATOR); $pdf->SetAuthor(''); $pdf->SetTitle('OPL Job Posting'); $pdf->SetSubject('Job Posting'); $pdf->SetKeywords('TCPDF, PDF, example, test, guide'); // remove default header/footer $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); //set margins $pdf->SetMargins(11, PDF_MARGIN_TOP, 11); //set auto page breaks $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); //set image scale factor $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set some language-dependent strings $pdf->setLanguageArray($l); // --------------------------------------------------------- $pdf->SetFont('times', 'I', 9); $pdf->AddPage(); $left_cell_width = 60; $row_height = 6; $pdf->Image(ROOT . 'assets/gfx/logos/OPL-Logo.jpg', 0, 5, null, 16, null, null, 'N', false, null,'R'); $pdf->Ln('3'); if(!$row['internal']) { $pdf->Cell(0,0,'This position will be posted internally and externally, concurrently.',0,2,'C'); } else { $pdf->Cell(0,0,'Internal posting only.',0,2,'C'); } //Remainder of actual PDF creation removed to keep things simple return $pdf->Output("", "S"); }