Ostatnio utworzyłem internetowy szablon do tworzenia ofert pracy dla naszej witryny. Wszystko jest zrobione, formatuje się poprawnie w przeglądarce, automatycznie publikuje na naszej stronie internetowej, bla bla bla.Wysyłanie e-mailem dynamicznie utworzonego pliku PDF za pośrednictwem PHP
Ostatni element, który tworzę, to dać administratorowi kilka opcji dystrybucji ogłoszeń w różnych miejscach (za pośrednictwem poczty elektronicznej) w spójny i wygodny sposób. Stworzyłem stronę PHP, która na bieżąco tworzy dokument PDF, korzystając z biblioteki TCPDF. Podczas ładowania pliku pdf.php? Id = X strona wyświetla plik PDF z zawartością zadania X. Oznacza to, że nigdy nie zapisuję pliku PDF na serwerze, po prostu tworząc go w locie za każdym razem, gdy jest wywoływany.
Ale chcę dołączyć ten plik PDF do wiadomości e-mail i wysłać go do różnych szkół wyższych, wewnętrznych list adresowych itp. Jeśli dołączę plik pdf.php? Id = x do wiadomości e-mail, nie zostanie on dołączony do wiadomości e-mail. PDF, dołącza to, co wydaje się pustym plikiem, o powyższej nazwie.
Czy można dołączyć to do wiadomości e-mail bez zapisywania jej na serwerze?
Poniżej dodano na podstawie odpowiedzi JM4 na dalsze rozwiązywanie problemów. Umieściłem tworzenie pliku PDF w funkcji i umieściłem go w pliku włączającym, aby ułatwić zarządzanie.
// 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<[email protected]>".$eol;
//$headers .= "Bcc: [email protected]".$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('[email protected]', 'test job posting', 'message body goes here', $headers)) {
echo 'mail sent';
} else {
echo 'error in email';
}
Oto okrojona wersja 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");
}
Pokaż nam kod (lub korzystnie bardzo wycięty dół szkielet). Wygląda na to, że metoda, której używasz, aby zmienić adres URL w załącznik do pliku, jest niepoprawna. Dlaczego tak bardzo zależy ci na tym, aby nie zapisywać pliku nawet tymczasowo? – symcbean
http://api.joomla.org/com-tecnick-tcpdf/TCPDF.html#methodOutput Używam opcji "I" dla dest. Zastanawiam się, czy opcja S jest tym, czego powinienem używać. –
czy któraś z odpowiedzi tutaj pomogła? – JM4