Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wysłanie załącznika pdf
Forum PHP.pl > Forum > PHP
MitS
Witam serdecznie,

mam taki problem.
Używam do generowania pdfów klasy FPDF zaś do wysyłki maili PHPMailer'a.
Wszystko fajnie się robi, tylko problem jest podczas wysyłki danego pdf'a w załaczniku.
Dodam że mail się wysyła ale bez załącznika oraz PDF sięgeneruje i otwiera w przeglądarce.

kod:
  1. <?php
  2. private function _createPDF(){
  3.    $pdf = new FPDF();
  4.    $pdf->Open();    
  5.    $pdf->AddPage('L');
  6.    
  7.    $pdf->AddFont('arial_ce','','arial_ce.php');
  8.    $pdf->AddFont('arial_ce','I','arial_ce_i.php');
  9.    $pdf->AddFont('arial_ce','B','arial_ce_b.php');
  10.    $pdf->AddFont('arial_ce','BI','arial_ce_bi.php');
  11.    
  12.    $pdf->SetFont('arial_ce', '', 12);
  13.    $pdf->MultiCell(370, 6, "\ntest", 0, 'C', 0);
  14.    return $pdf->Output();
  15. }
  16.  
  17. private function _sendMsg(){
  18.    $mailBody = "bla bla";
  19.  
  20.    $mail = new Mailer();
  21.    $mail->From = SUPPORT_MAIL;
  22.    $mail->FromName = SUPPORT_FROM;
  23.    $mail->Host = HOST_MAIL_SERVER;
  24.    $mail->Mailer = SEND_MAIL_THROUGH;
  25.    $mail->Username = SUPPORT_MAIL;
  26.    $mail->Password = SUPPORT_MAIL_PASSWORD;
  27.    $mail->SMTPAuth = true;
  28.    $mail->Subject = SUPPORT_SUBJECT;
  29.    $mail->Body = $mailBody;
  30.    $mail->AddAddress(SUPPORT_MAIL);
  31.    $mail->AddAttachment($this->_createPDF());
  32.    if($mail->Send()){
  33.        $mail->ClearAddresses();
  34.        $mail->ClearAttachments();
  35.        return true;
  36.    }
  37.    $mail = null;
  38.    return false;
  39. }
  40. ?>


Moje pytanie brzmi - jak wysłać wygenerowanego PDF'a w załączniku a po wysłaniu otworzyć w oknie danego pdfa questionmark.gif?
Moje drugie pytanie jak zapisać wygenerowanego pdf'a na serwer - bo jak robie Output(); to otwiera mi sie pdf w przeglądarce?questionmark.gif
korro
Witam.
Błąd polega na tym, że
  1. <?php
  2. $pdf->Output()
  3. ?>
wysyłka treść do przeglądarki, nie w formie stringa.
Najłatwiej będzie zrobić to tak:
  1. <?php
  2. $pdf->Output("nazwa.pdf","F"); //zapis do pliku
  3. ...
  4. $mail->AddAttachment("nazwa.pdf");
  5. ...
  6. if($mail->Send()){
  7. ...
  8. unlink("nazwa.pdf"); //kasowanie pliku
  9. ?>


Możesz też pójść inną, profesjonalniejszą drogą.
Zwrócić pdfa w formie stringa:
  1. <?php
  2. $pdf->Output(null,"F"); //zwraca stringa
  3. ?>

i dodać to do maila jako inline.
Zakodować do w base64 i dalej według manuala:
Cytat
AddAttachment($path, $name = "", $encoding = "base64", $type = "application/octet-stream")

Pozdrawiam.
MitS
Ten drugi sposób byłby nawet idealny, tylko że gdy tak robię to zwracam mi:
FPDF error: Unable to create output file:

a gdy zamiast null daje jakąś nazwę wtedy mam błąd:
Brak dostępu do pliku:



i co mam teraz zrobić?
skowron-line
Ja robie to tak
  1. <?php
  2. // dane konf phpMailer
  3. include( 'plik.php'  ); // tu normalnie generuje pdf output( 'nazwa.pdf', 'f' );
  4.  
  5. //send();
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.