E-Mail an Einen Dynamisch Erstellten PDF-Dokumente Durch PHP
Habe ich vor kurzem erstellt eine online-Vorlage für die Erstellung von Stellenausschreibungen für unsere website. Alles ist getan, es Formate korrekt in einem browser, der automatisch die Beiträge unserer website, bla bla bla.
Das Letzte Stück, das ich Schaffe zu geben, ist der administrator einige Optionen für die Verteilung der posten an verschiedenen stellen (per E-Mail) in eine konsistente, bequeme Weise. Ich habe eine PHP-Seite, erstellt ein PDF-doc-on-the-fly mit der TCPDF-Bibliothek. Beim laden von pdf-Dateien.php?id=X, zeigt die Seite eine PDF-Datei mit den Inhalten der Stellenanzeige X. Dies bedeutet, dass ich nie speichern Sie die PDF-Datei auf den server, nur schaffen Sie es on the fly " jedes mal, wenn es aufgerufen wird.
Aber ich möchte anfügen, dass diese PDF an eine E-Mail, und senden Sie es an verschiedenen Hochschulen und interne mailing-Listen, etc. Wenn ich das Anhängen der pdf-Datei.php?id=x an die E-Mail, es ist nicht befestigen Sie die PDF-Datei, misst es das, was scheint zu sein, eine leere Datei mit dem oben angegebenen Namen.
Ist es möglich, fügen Sie diese an die E-Mail ohne zu speichern auf dem server?
Unten Hinzugefügt, basierend auf JM4 Antwort für die weitere Fehlersuche. Ich habe die Erstellung von PDF-Dateien in eine Funktion, und legen Sie es in eine include-Datei, nur um die Dinge einfacher zu verwalten.
//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';
}
Hier ist eine abgespeckte version der 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");
}
- Zeigen Sie uns den code (oder vorzugsweise ein Schnitt nach unten Skelett). Es klingt wie die Methode, die Sie verwenden, um aktivieren Sie die URL in eine Datei-Anlage ist falsch. Warum sind Sie so besorgt über Sie nicht schreiben Sie eine Datei auch nur vorübergehend?
- api.joomla.org/com-tecnick-tcpdf/TCPDF.html#methodOutput ich bin mit dem 'ich' - option für dest. Ich Frage mich, ob die S-option ist, was ich verwenden soll.
- habe die Antworten hier helfen?
- haben Sie das gelöst?
- Nein, ich habe aus diesem Projekt seit mehreren Jahren. Ich glaube, dass ich gerade gespeichert, um den Ordner "temp" und dann befestigt es.
- Ich habe es geschafft mich in der Zwischenzeit, vielen Dank für die Antwort, aber 😉
- sind alle Antworten richtig? Können Sie fügen Sie die richtige Lösung, so können wir schließen diese aus?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich völlig verstehen, was Sie Fragen ist das ganz einfach. Ich gehe davon aus, dass Sie bereits über die PDF-Datei generiert, mit so etwas wie fdpf oder tcpdf. In diesem Fall, einfach den folgenden code verwenden:
Hatte ich gerade um dies herauszufinden, und meine Augäpfel waren auf jeden Fall wund vom Ende...
1) Sie müssen installieren PHPMailer der php-server.
2) Gehören die PHPmailer-Klasse in Ihrer TCPDF Skript, wie dies (der Pfad kann variieren):
3) Jetzt, nachdem Sie Ihre pdf-code sprechen Sie einfach mit PHPMailer etwa so:
Natürlich haben Sie viele Optionen für die E-Mail gesendet, wie nicht mit html, oder das versenden von html und text, indem viele Empfänger und/oder cc ' s, etc.
EDIT: funktioniert speichern Sie die Datei vorübergehend auf dem server, aber es bereinigt nach sich selbst mit der unlink-Befehl.
Werfen Sie einen Blick auf diese Seite, die beschreibt, erweiterte E-Mail in PHP.
http://articles.sitepoint.com/article/advanced-email-php/5
Nehmen Sie eine hochgeladene Datei und laden Sie die binären Daten in $Daten, aber Sie können nur von dort aus starten.
Können Sie auch wollen, schauen Sie senden es als Anhang per PEAR Mail_Mime. Kann es akzeptieren, eine Anlage als eine Kette von Daten.
Den RMail-Paket auch aussieht als wenn er das gleiche tun wird über die stringAttachment Klasse. Sie müssen google für Sie, denn ich bin ein neue Benutzer und so kann ich nur nach einem link zu einem Zeitpunkt.
Ich Zustimmen, über die Verwendung einer mail-Bibliothek von building-mime-Nachrichten, die von hand mit der Standard mail () - Funktion. SwiftMailer ist eine gute open-source-PHP-mail-Bibliothek. Hier ist die Beispiel-code für die Verwendung dynamischer Inhalte, wie Sie eine Befestigung ohne es vorher zu speichern, um die Datei-system-ersten.
Ihrem Header zu sein scheinen ein wenig aus:
application/octet-stream
werden sollteapplication/octetstream
Content-Disposition: attachment ..
werden sollteContent-Disposition: attachment; filename="' . basename($filename) . '"
heres, was die Bindung Header Aussehen soll:
Diese Aufnahme wurde von einer meiner arbeiten, Anwendungen, hier ist der loop, wenn Sie wünschen, um es zu sehen: