Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wygenerowany fpdf jako załącznik w meilu
Forum PHP.pl > Forum > PHP
mlattari
Witam po długiej przerwie :-))

Jaki sposób sugerujecie na wysyłanie meilem wygenerowanego fpdfa ?
Jak dotąd generowane fpdfy (pliki PDF wygenerowane poprzez klasę fpdf) muszę zapisywać lokalnie i załączać do poczty po stronie klienta ale chciałbym aby po kliknięciu w odpowiedni link serwer wysyłał mi odpowiedniego fpdfa jako załącznik do meila do odpowiedniego odbiorcy.

Bardzo dziękuję z góry za podpowiedzi :-)
maly_swd
jesli chodzi o wysylanie mail z zalacznikiem to ta klasa jest dobra class.phpmailer.php
http://phpmailer.codeworxtech.com/
nitek
generujesz fpdfem,
zapisujesz na serwerze w katalogu tymczasowym,
wysyłasz z automatu maila (również polecam PHPmailer) z wygenerowanym pdf jako załącznikiem,
kasujesz z serwera wygenerowany plik.
wszystko dzieje się w jednym skrypcie...

co do bezpieczeństwa, odpowiednie uprawnienia + do generowanych nazw możesz używać jakiegoś random z czasu i md5 z tego + htaccess na katalog tymczasowy.
erix
A po co?

ob_start" title="Zobacz w manualu PHP" target="_manual, np. phpMailer pozwala załączyć strumień bezpośrednio do maila, bez konieczności zapisu plików. [;
nitek
Cytat(erix @ 29.06.2009, 19:14:48 ) *
ob_start" title="Zobacz w manualu PHP" target="_manual, np. phpMailer pozwala załączyć strumień bezpośrednio do maila, bez konieczności zapisu plików. [;

O tym nie pomyślałem. Rozwiązanie ambitniejsze winksmiley.jpg (Czyt. lepsze smile.gif)
mlattari
No ob_start wydaje się być świetnym i bardzo prostym rozwiązaniem. Ale, ponieważ widzę to tylko teoretycznie bo nigdy nie bawiłem się w wysyłanie zawartości bufora jako załącznik poczty, ciekawi mnie jak przerzucić zawartość bufora do załącznika... Erix, czy mógłbyś dać jakiś bardzo prosty przykład? Rozumiem że wygląda to tak:

- ob_start;

- generacja fpdf;

- $zalacznik=ob_get_contents();

- ob_end_clean();

- dodaję załącznik...

/"Content-Disposition: attachment;\n" .
//" filename=\"{$zalacznik}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .

I czy to miało by być aż tak proste? Trochę nie chcę mi się wierzyć :-)))

Czy Ty właśnie to miałeś na myśli z tym ob_start()?
bim2
Hmm, nie wiem jakie nagłówki powinieneś wysłać ale klasa PHPMailer posiada metodę, do której możesz wrzucić strumień danych jako załącznik. I tak, to własnie ~erix miał na myśli z ob_start() smile.gif
mlattari
hehehe UDAŁO się! TO JEST TYLKO TAKI TEST ALE DZIAŁA (POD LINUXEM) :-)

  1. <?php
  2. $to = "Michael Lattari <mlattari@filemon.eurosistemi>";
  3.  
  4. $from = "Michael Lattari <mlattari@filemon.eurosistemi>";
  5.  
  6. $subject = "Test";
  7.  
  8. $message = "TEST";
  9.  
  10. // $fileatttype = "application/pdf";
  11.  
  12. $fileatttype = "text/html";
  13.  
  14. // $fileattname = "test.pdf";
  15.  
  16. $fileattname = "test.html";
  17.  
  18. $headers = "From: $from";
  19.  
  20. $semi_rand=md5(time());
  21.  
  22. $mime_boundary="==Multipart_Boundary_x{$semi_rand}x";
  23.  
  24. $headers.="\nMIME-Version: 1.0\n" .
  25.          "Content-Type: multipart/mixed;\n" .
  26.           " boundary=\"{$mime_boundary}\"";
  27.  
  28. $message="This is a multi-part message in MIME format.\n\n" .
  29.         "--{$mime_boundary}\n" .
  30.         "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
  31.         "Content-Transfer-Encoding: 7bit\n\n" .
  32.         $message . "\n\n";
  33.  
  34. // Załącznik
  35.  
  36.  
  37. echo "
  38.  
  39. <html>
  40.  <body>
  41.   <center>TEST</center>
  42.  </body>
  43. </html>
  44.  
  45. ";
  46.  
  47.  
  48. $data=ob_get_contents();
  49.  
  50.  
  51.  
  52. $message.="--{$mime_boundary}\n" .
  53.          "Content-Type: {$fileatt_type};\n" .
  54.          " name=\"{$fileatt_name}\"\n" .
  55.            "Content-Disposition: attachment;\n" .
  56.            " filename=\"{$fileattname}\"\n" .
  57.            "Content-Transfer-Encoding: 7bit\n\n" .
  58.            $data . "\n\n" .
  59.            "--{$mime_boundary}--\n";
  60.  
  61.  
  62. if ( mail ($to, $subject, $message, $headers ) ) {
  63.  
  64. echo "<p>Wysłaneeee...</p>";
  65.  
  66. }
  67.  
  68. else {
  69.  
  70. echo "<p>Nie udało się</p>";
  71.  
  72. }
  73. ?>


ERIX! DZIĘKI ZA JAK ZWYKLE FACHOWĄ PODPOWIEDŹ !
bim2
Nie musisz tak dużą czcionką pisać, podziekowania dajemy na forum guziczkiem POMÓGŁ znajdującym się przy poście, który tobie pomógł smile.gif

nie musisz nabijać postów, przecież możesz wysłać PW, nie?

~erix
mlattari
Jednak jest jeszcze prostszy sposób w przypadku korzystania z fpdf.... :-)

Przytaczam przykład....

  1. <?php
  2. if ( isset($_GET['email']) && $_GET['email']=='1' ) {
  3.  
  4. $to = "adres@meilowy.odbiorcy";
  5. $from = "adres@nadawcy.meila";
  6. $subject = "Temat";
  7. $message = "
  8.  
  9. tekst wiadomości
  10.  
  11. ";
  12.  
  13. $separator = md5(time());
  14. $eol = PHP_EOL;
  15.  
  16. $filename = "raport.pdf";
  17. $pdfdoc = $mypage->Output("", "S");
  18. $attachment = chunk_split(base64_encode($pdfdoc));
  19.  
  20. $headers = "From: ".$from.$eol;
  21. $headers .= "MIME-Version: 1.0".$eol;
  22. $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol;
  23. $headers .= "Content-Transfer-Encoding: 7bit".$eol;
  24. $headers .= "This is a MIME encoded message.".$eol.$eol;
  25.  
  26. $headers .= "--".$separator.$eol;
  27. $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
  28. $headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  29. $headers .= $message.$eol.$eol;
  30.  
  31. $headers .= "--".$separator.$eol;
  32. $headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
  33. $headers .= "Content-Transfer-Encoding: base64".$eol;
  34. $headers .= "Content-Disposition: attachment".$eol.$eol;
  35. $headers .= $attachment.$eol.$eol;
  36. $headers .= "--".$separator."--";
  37.  
  38. mail($to, $subject, "", $headers);
  39.  
  40.  }
  41. ?>


Mam tylko z tym pewien problem a mianowicie po wykonaniu

$pdfdoc = $mypage->Output("", "S") (zrzut zawartości pdf do zmiennej $pdfdoc) ale przed wyświetleniem pliku w przeglądarce poprzez

ponowne wykonanie Output(), czyli

$mypage -> Output()

nie mogę nic dodać do wyświetlanej zawartości pdf np. poprzez Cell()

Czy mógł by mi ktoś poradzić jak to zrobić? Dzięki!

Czy nie da się zmienić zawartości stworzonego PDFa "pomiędzy" kilkakrotnym użyciem metody Output() ?
skowron-line
Cytat
Czy nie da się zmienić zawartości stworzonego PDFa "pomiędzy" kilkakrotnym użyciem metody Output() ?


output konczy działanie klasy fpdf więc nic nie wydrukujesz na pdf po wywołaniu tej metody
mlattari
Cytat(skowron-line @ 30.06.2009, 23:20:11 ) *
output konczy działanie klasy fpdf więc nic nie wydrukujesz na pdf po wywołaniu tej metody


no własnie...

Jak to obejść? :-))) Chyba pozostaje mi tylko sklonowanie obiektu przed użyciem Output()....

Jest inny sposób na to?
skowron-line
A co ty wogóle chcesz zrobić questionmark.gif
mlattari
Cytat(skowron-line @ 1.07.2009, 00:12:54 ) *
A co ty wogóle chcesz zrobić questionmark.gif


hehe wrzucam sobie wygenerowany fpdf jako załącznik do meila czyli $zalacznik=$mojdokument->Output("", "S") itd itd (klient dostaje raport o swoich zamówieniach)

a zaraz potem wyświetlam sobie zawartość tego pdf w przeglądarce (jako info dla handlowca o tym co klientowi właśnie wysłał) no i chciałem TYLKO DO wyświetlanego się w przeglądarce pdfa dodać kilka linijek tekstu z informacją dla handlowca o tym, że ten raport został właśnie wysłany :-) ale się nie da :-))

Ale jeżeli nie da się no to w sumie w sumie może to info zostać także dla odbiorcy tylko będę musiał zmienić trochę formę tekstu :-)) Bo chyba to nie będzie takie proste.... :-)
skowron-line
Musisz 2 razy wygenerować ten plik a jak to będziesz robił to wiadomo instrukcje warunkowe
mlattari
no chyba to by mi pozostało :-( Myślałem, że jest jakieś obejście :-)
erix
Ech, a nie możesz wygenerować, dać ob_start" title="Zobacz w manualu PHP" target="_manual, potem przez ob_get_flush" title="Zobacz w manualu PHP" target="_manual pobrać i wypluć?
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.