Gần đây tôi đã tạo mẫu trực tuyến để tạo thông tin đăng tuyển dụng cho trang web của chúng tôi. Tất cả mọi thứ được thực hiện, nó định dạng chính xác trong một trình duyệt, tự động đăng lên trang web của chúng tôi, bla bla bla.Gửi email một PDF được tạo động thông qua PHP
Phần cuối cùng tôi đang tạo là cung cấp cho quản trị viên một vài tùy chọn để phân phối bài đăng tới nhiều nơi khác nhau (qua email) một cách nhất quán, thuận tiện. Tôi đã tạo ra một trang PHP mà tạo ra một tài liệu PDF trên bay, sử dụng thư viện TCPDF. Khi tải pdf.php? Id = X, trang hiển thị tệp PDF có nội dung đăng công việc X. Điều này có nghĩa là tôi không bao giờ lưu tệp PDF vào máy chủ, chỉ cần tạo tệp đó khi đang chạy.
Nhưng tôi muốn đính kèm tệp PDF này vào email và gửi tới nhiều trường khác nhau và danh sách gửi thư nội bộ, v.v. Nếu tôi đính kèm pdf.php? Id = x vào email, nó không đính kèm PDF, nó đính kèm những gì dường như là một tập tin trống, với tên trên.
Có thể đính kèm email này vào email mà không lưu nó vào máy chủ không?
Dưới đây được thêm vào dựa trên phản ứng của JM4 để chụp thêm sự cố. Tôi đã tạo tập tin PDF tạo thành một hàm, và đặt nó vào một tệp bao gồm, chỉ để giữ cho mọi thứ dễ quản lý hơn.
// 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';
}
Đây là một phiên bản rút gọn 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");
}
Hiện chúng tôi mã (hoặc tốt hơn là một bộ xương rất chặt). Có vẻ như phương pháp bạn đang sử dụng để biến URL thành tệp đính kèm bị sai. Tại sao bạn quan tâm đến việc không viết một tập tin ngay cả khi tạm thời? – symcbean
http://api.joomla.org/com-tecnick-tcpdf/TCPDF.html#methodOutput Tôi đang sử dụng tùy chọn 'Tôi' cho mục đích. Tôi tự hỏi nếu tùy chọn S là những gì tôi nên sử dụng. –
có bất kỳ câu trả lời nào ở đây giúp bạn không? – JM4