Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wysłanie maila przez klienta poczty
Forum PHP.pl > Forum > Przedszkole
narki1
Witam
Potrzebuję wygenerować plik pdf i wysłać go mailem przy pomocy klienta poczty.
Generuję pdf ale nigdzie nie mogę znaleźć jak wysłać go jako załącznik w domyślnym kliencie poczty np. Outlooku.
matino
Musisz ustawić odpowiednie nagłówki - nie polecam się w to bawić samemu, o wiele wygodniej Ci będzie jeśli skorzystasz z darmowych bibliotek PHPMailer lub Swiftmailer, które radzą sobie z załącznikami bez problemu.
Tutaj masz opis jak to zrobić dla swifta - http://swiftmailer.org/docs/messages.html#attaching-files
narki1
Potrafię wysyłać z załącznikiem z użyciem phpmailer.
Potrzebuję zrobić tak ,żeby otwierał się domyślny klient poczty np. outlook a tam będzie już dodany załącznik (mój pdf) oraz adresat wiadomości.
Użytkownik musi tylko klinąć "wyślij".

Witam
Temat powraca.
Próbowałem zrobić coś takiego:
  1. echo '<br/><a href="mailto:kowalski@xxx.com.pl?subject=rower&body='.$body.'">Tresc linka</a>'

A wcześniej w body wkomponować zakodowaną treść pdf'a w base64.
  1. $input_file="pdf/".$file;
  2. $f=fopen($input_file,'r');
  3. $data='';
  4. while(!feof($f))
  5. $data.=fread($f,filesize($input_file));
  6. fclose($f);
  7.  
  8. $body=base64_encode($data).'';

Niestety link po kliknięciu nie robi nic.
Może body ma ograniczoną liczbę znaków.
Utknąłem na dobre.
wNogachSpisz
Polecam narzędzie które do tego służy.
Nie żadne cuda na kiju, pisane przez cholera wie kogo, zabugowane, przestające działać w najmniej oczekiwanym momencie.

Na SMTP trzeba uważać. Wystarczy przeczytać tę biblitekę żeby się o tym przekonać:
http://pear.php.net/package/Mail_Mime
narki1
Cytat
Na SMTP trzeba uważać. Wystarczy przeczytać tę biblitekę żeby się o tym przekonać:
http://pear.php.net/package/Mail_Mime

Nie wiem jak tego użyć.
Próbuję tak:
  1. require_once ('/Mail/mime.php');
  2. $crlf = "\r\n";
  3. $mime = new Mail_mime($crlf);
  4. $mime->addAttachment($file, 'application/pdf');
  5. $body = $mime->get();
  6.  
  7. echo '<br/><a href="mailto:kowalski@xxx.com.pl?subject=rower&body='.$body.'">Tresc</a>';

Otrzymuję błędy:
Strict Standards: Non-static method PEAR::raiseError() should not be called statically, assuming $this from incompatible context in E:\Apache_portable\xampp\php\PEAR\Mail\mime.php on line 382

Strict Standards: Non-static method PEAR::getStaticProperty() should not be called statically, assuming $this from incompatible context in E:\Apache_portable\xampp\php\PEAR\PEAR.php on line 871

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in E:\Apache_portable\xampp\php\PEAR\Mail\mime.php on line 354
!*!
Tylko co jeśli klient zmieni klienta poczty? W ogóle cudujesz za bardzo z tym. Nawet jeśli upchniesz to jako "body" w treści, to nie masz pewności czy zadziała to wszędzie.
wNogachSpisz
Cytat(narki1 @ 5.12.2011, 11:35:49 ) *
Otrzymuję błędy:
Strict Standards:

Poczytałbyś troche na ten temat zanim napiszesz na forum.
Użyj google.
narki1
Cytat
Tylko co jeśli klient zmieni klienta poczty? W ogóle cudujesz za bardzo z tym. Nawet jeśli upchniesz to jako "body" w treści, to nie masz pewności czy zadziała to wszędzie.

Ja chcę tylko wysłać maila przez klienta poczty z załącznikiem z localhosta. Nie chcę "cudować" tylko zrobić proste rozwiązanie ale nie wiem jak.

Nikt nie pomoże ?
vokiel
Wyobrażasz sobie sytuację, gdy wchodzisz na jakąś stronę i otwiera Ci się program pocztowy, z dołączonym od razu załącznikiem? Chciałbyś, aby takie coś mogło mieć miejsce? Ja np nie chcę.

Poza tym, pomyśl przez chwilę logicznie. Żeby załącznik mógł być wysłany z komputera, to musi być na nim fizycznie. Czyli użytkownik musi ten załącznik pobrać, zapisać na dysk i wtedy dołączyć do maila. Więc jedyne co możesz zrobić to wygenerować link, którego kliknięcie otworzy klienta poczty, a za nim drugi link do załącznika. Ewentualnie możesz połączyć to razem, i po kliknięciu w link, poza otwarciem programu, w tle wysłać plik do zapisania na dysku. Wtedy użytkownik zapisze plik, i już sam ręcznie dołączy go do wiadomości.
!*!
Prościej byłoby zrobić formularz na serwerze z opcją wysyłania załącznika. A jeśli chodzi o kontakty z programu, to można je pobrać.

Obecnie chcesz utworzyć komunikacje serwer = klient która nie ma racji bytu, nawet jeśli to miałoby działać tylko na localu. Dobrej 100% metody na to nie ma, ponieważ zahacza to o względy bezpieczeństwa.
narki1
Chodzi o to ,że na dysku lokalnym generuje dokument ,który jednym kliknięciem chciałbym wysłać korzystając z klienta pocztowego użytkownika. W kontaktach nie muszę "grzebać" ponieważ adres e-mail odbiorcy, temat wiadomości jest znany i plik załącznika już istnieje na serwerze ( wcześnie wygenerowany pdf).
Oczywiście można ręcznie załączyć dokument pdf otwierając np. outlooka , dodając odbiorcę , temat itp. ale nie wyobrażam sobie ,żeby ten użytkownik dołączył plik który znajduje się na np. D:/apacheserwer/htmldokc/tratatata/tratatata/pdf/dokument.pdf. To jest powód tej automatyzacji. Do tego wykluczam częste pomyłki wysłania emaila bez załącznika ( bo się już tyle naklikało ,że załącznika dodać się zapomniało) .
!*!
To co za problem wysłać to wszystko bezpośrednio z serwera, tym bardziej że PDF już na nim leży? Program pocztowy jest zbędny.
narki1
Cytat
To co za problem wysłać to wszystko bezpośrednio z serwera, tym bardziej że PDF już na nim leży? Program pocztowy jest zbędny.

Z lokalnego - ja nie wiem jak
vokiel
Czyli lokalnie masz postawiony jakiś serwer www (lamp, wamp etc), tak? No to sobie konfigurujesz skrypt (PHPMailer, SwiftMailer) pod dane konta pocztowego, które masz ustawione w Outlooku. Wysyłasz tego maila ze skryptu, tak jakbyś go wysłał normalnie z programu pocztowego.

Chyba, że chodzi o coś innego. Jak przybliżysz dokładniej swoją sytuację, będzie łatwiej o rozwiązanie.
narki1
Tak jak mówisz - lokalny serwer www na xamppie. php + mysql.
Do serwisu ma dostęp kilku użytkowników. Każdy może wygenerować dokument w pdf-ie.
Następnie chciałbym żeby można było albo podejrzeć dokument (proste, zrobione, zapomniane) albo kliknąć przycisk lub link "wyślij dokument e-mailem".
Tu otwiera się domyślny klient poczty ( najczęściej officowe outlooki ) i użytkownik ma wpisanego adresata , temat wiadomości i załącznik pdf. Musi tylko dodać jakąś treść (lub nie) i kliknąć przycisk "wyślij" ( w tym outlooku). Rozwiązanie to ma takie plusy ,że użytkownik ma w historii wysłanego maila z dokumentem (istotne) oraz ogranicza szukanie załączników po serwerze o czym pisałem wcześniej.
Pasował by mi htmlowy
Kod
mailto:
- otwiera klienta, dodaje adresata oraz temat wiadomości. Nie ma jednak załącznika.
abort
Taaaa. Domyślny klient poczty. Fajnie, tyko tych "domyślnych klientów" może być sterta. Od bardziej popularnych, typu produktów MS (Outlook, OE), przez multiplatformowe (Thunderbird), lansowane przez firmy (np. Lotus Domino), czy ściśle jednoplatformowe, a nawet wręcz konsolowe (linuksowy mutt).

Dla Windowsa można chyba to zrobić, jest parę porad na http://stackoverflow.com/questions/1195111...with-attachment (patrz komentarze pod postem)
Dla Thunderbirda możesz pobawić się tym, co jest opisane na https://developer.mozilla.org/En/Command_Line_Options
Poza tym uważam, że może to być karkołomne zajęcie (sprawdzanie wszystkich rodzajów klientów poczty), choć nie mówię, że niemożliwe.
Ogólnie, jeśli masz do dyspozycji skończoną ilość używanych programów do poczty i nie pojawi się żaden "egzotyczny" program, to myślę, że jest to wykonalne.

P.S.
Abstrahuję od tego, że sam kląłbym na czym świat stoi, gdyby podczas przeglądania sieci i generowania dokumentów otwarł się "znikąd" program pocztowy. Chyba warto rozważyć alternatywę pod nazwą "wysyłanie maili z serwisu WWW"
narki1
Czy żeby dodać załącznik trzeba sformatować go inaczej dla każdego klienta poczty ? Przecież w html'u "mailto:" otwiera każdego , dodaje odbiorcę itp.
  1. Abstrahuję od tego, że sam kląłbym na czym świat stoi, gdyby podczas przeglądania sieci i generowania dokumentów otwarł się "znikąd" program pocztowy.

Przecież jak ktoś użyje "mailto:" to też się otworzy "znikąd" program pocztowy. Spotkałem może w internecie raz taką "niespodziankę"
nospor
@vokiel podał już chyba najlepsze z możliwych rozwiązań. Ponadto tak sie to właśnie robi:
Cytat
No to sobie konfigurujesz skrypt (PHPMailer, SwiftMailer) pod dane konta pocztowego, które masz ustawione w Outlooku. Wysyłasz tego maila ze skryptu, tak jakbyś go wysłał normalnie z programu pocztowego.

!*!
Cytat(narki1 @ 7.12.2011, 08:53:26 ) *
Czy żeby dodać załącznik trzeba sformatować go inaczej dla każdego klienta poczty ? Przecież w html'u "mailto:" otwiera każdego , dodaje odbiorcę itp.
  1. Abstrahuję od tego, że sam kląłbym na czym świat stoi, gdyby podczas przeglądania sieci i generowania dokumentów otwarł się "znikąd" program pocztowy.

Przecież jak ktoś użyje "mailto:" to też się otworzy "znikąd" program pocztowy. Spotkałem może w internecie raz taką "niespodziankę"


A jeśli ja kliknę na link z "mailto" to zapewniam Cie że nic mi się nie otworzy i co wtedy? Twój sposób wysyłania maila z załącznikiem leży.

Masz serwer localny, dostęp do niego ma kilka osób. To generuj ten PDF na serwerze, tam go zapisuj i ewnetualnie daj możliwość jego pobrania i/lub wysłania go z serwera na wskazany adres emial. Skryptów do tego typu rzeczy jest od groma. A jeśli tak bardzo zależy Ci na "historii" w programie pocztowym, to na to też są sposoby, ale to wyższa szkołą jazdy i przydałaby się poczta IMAP.
vokiel
Jeśli masz kilku użytkowników systemu, to niech każdy loguje się na swoje konto, dzięki temu będziesz mógł dla każdego ustawić indywidualnie nadawcę w skrypcie.
Po kliknięciu na Twój przycisk "wyślij dokument e-mailem" pojawia się pole do wpisania treści, po jej wpisaniu skryptem wysyłasz maila, dodajesz adres e-mail użytkownika systemu do ukrytej kopii. Dzięki temu on też dostanie tego maila, będzie miał go w swoim programie. Jako, że wpadnie on do odebranych, to trzeba ustawić regułę żeby przenosiła takie maile do innego katalogu.

IMHO najszybciej, najłatwiej, najpewniej.
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.