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?

InformationsquelleAutor Cory Dee | 2010-08-19
Schreibe einen Kommentar