Autor | Zpráva | ||
---|---|---|---|
Luky Profil |
Zdravím,
Gmail email zobrazuje správně, ale Seznam nepochopí přílohu (noname.txt) ani text zprávy není zrovna ideální (zobrazí použité kódování v těle zprávy: Content-type: text/plain; charset=utf-8). Soubor objednvka.pdf je generován knihovnou mPDF. $content = $mpdf->Output('', 'S'); $content = chunk_split(base64_encode($content)); $uid = md5(uniqid(time())); ... $filename = 'objednavka.pdf'; $header = "From: ".$from_name." <".$from_mail.">"; $header .= "Reply-To: ".$replyto."\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; $header .= "This is a multi-part message in MIME format.\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-type:text/plain; charset=utf-8\r\n"; $header .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $header .= $message."\r\n\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n"; $header .= "Content-Transfer-Encoding: base64\r\n"; $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; $header .= $content."\r\n\r\n"; $header .= "--".$uid."--"; Děkuji za každou radu. |
||
Davex Profil |
#2 · Zasláno: 24. 2. 2013, 18:28:06
Luky:
To je samozřejmě absolutní nesmysl skládat tělo e-mailu v hlavičce. Kromě toho chybí na konci prvního řádku hlavičky odřádkování. |
||
Luky Profil |
#3 · Zasláno: 24. 2. 2013, 18:55:43
Davex:
„To je samozřejmě absolutní nesmysl skládat tělo e-mailu v hlavičce“ Já jsem si to také říkal, ale zkopíroval jsem to z té dokumentace mPDF (odkaz v prvním příspěvku). V Seznamu to nefunguje ani po opravení té hlavičky. Zkusil jsem to tedy takto, ale opět neúspěšně: $header2 = "From: ".$from_name." <".$from_mail.">\r\n"; $header2 .= "Reply-To: ".$replyto."\r\n"; $header2 .= "MIME-Version: 1.0\r\n"; $header2 .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n"; $header2 .= "This is a multi-part message in MIME format.\r\n"; $header2 .= "Content-type: text/plain; charset=utf-8\r\n"; $header .= "Content-Transfer-Encoding: 8bit\r\n"; $header2 .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n"; $header2 .= "Content-Transfer-Encoding: base64\r\n"; $header2 .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n"; $header2 .= $content."\r\n"; mail($email, $subject2, $message2, $header2) |
||
Davex Profil |
#4 · Zasláno: 24. 2. 2013, 19:43:11
Kupodivu jsi to ještě víc rozbil. Raději použij pro odeslání přílohy PHPMailer podle příkladu.
|
||
Luky Profil |
Díky, je to rozbitý no :)
V PHPMailer nevím jak poslat přílohu, která není nikde uložená, ale vygenerovaná v tom mPDF (nechce se mi ten soubor nejdříve uploadovat, pak poslat a zase smazat) Nepomohl bys mi prosím s úpravou těch hlaviček? Nebo spíš co opravit zde, aby to fungovalo i pro ten Seznam. |
||
weroro Profil |
Luky:
„nechce se mi ten soubor nejdříve uploadovat, pak poslat a zase smazat“ Prečo by si ho uploadoval? Presne toto akurát vtejto chvíli riešim aj ja (dokonca používam mPDF :) ) a je to jednoduché. Najprv overím položky odoslané z formulára (ty žiadne nemáš), ak sú v poriadku vygenerujem PDF podľa šablony (z pripraveného HTML), uložím ho na server a nalinkujem cestu k súboru do attach premennej v phpMailer. Odošlem e-mail a následne zmažem to vygenerované PDF ( teda ak si ho nechcem nechať do zálohy). Všetko toto sa deje na strane servera, takže nie je potrebné niečo uploadovať. |
||
Luky Profil |
weroro:
„Prečo by si ho uploadoval? ... uložím ho na server a nalinkujem cestu“ Ok, tak by to šlo. Ale soubor se musí uploadovat na server a pak ho teda smazat. Jinak mám v tom případě obdobný případ. Na základě formuláře se vygeneruje PDF soubor a ten se pošle zákazníkovi na mail. Nevadí no, i tak děkuji ;) |
||
Davex Profil |
#8 · Zasláno: 24. 2. 2013, 20:24:01
Luky:
„V PHPMailer nevím jak poslat přílohu, která není nikde uložená“ Stačí si prostudovat dokumentaci. Věřím, že to tam najdeš. |
||
Luky Profil |
Díky. Tohle už přílohu posílá, ale nevím jak a jaké mám použít kódování. Email se odešle v pořádku, příloha má správný tvar i velikost, ale soubor nejde otevřít.
$mpdf->WriteHTML($html); $content = $mpdf->Output('', 'S'); $content = chunk_split(base64_encode($content)); $attachment_name = 'soubor.pdf'; $mail = new PHPMailer(true); try { $mail->AddAddress('XXX', 'John Doe'); $mail->SetFrom('XXX', 'First Last'); $mail->AddReplyTo('XXX', 'First Last'); $mail->Subject = 'PHPMailer Test Subject via mail(), advanced'; $mail->Body = 'To view the message, please use an HTML compatible email viewer!'; $mail->AddStringAttachment($content, $attachment_name, 'base64', 'application/pdf'); $mail->Send(); ... |
||
Davex Profil |
#10 · Zasláno: 25. 2. 2013, 18:51:10
Kódování za tebe řeší PHPMailer, takže třetí řádek není vůbec potřeba.
|
||
Luky Profil |
#11 · Zasláno: 25. 2. 2013, 18:57:59
Davex:
Díky moc, už to funguje jak má ;) |
||
Časová prodleva: 2 měsíce
|
|||
Luďa Profil * |
#12 · Zasláno: 12. 4. 2013, 21:02:15
Luky:
teď jsem vyřešil stejný problém... Přímo na webu mPDF je u příkladu s odesíláním pdf pomocí mailu uvedeno: "Note: If you have problems with this example, try using \n instead of \r\n. See the note in PHP mail." Vše nyní funguje ( a to dokonce i na seznamu) tak jak má... S pozdravem, Q |
||
Časová prodleva: 4 dny
|
|||
Luďa Profil * |
#13 · Zasláno: 16. 4. 2013, 22:51:43
Ještě doplním řešení pro neštastníky bojující s e-mailovým klientem na Tiscali.cz.
ukázka funkčního kódu" $header .= "Content-Type:application/pdf; name=\"".$filename."\"\n"; $header .= "Content-Transfer-Encoding:base64\n"; $header .= "Content-Disposition:attachment; filename=\"".$filename."\"\n\n"; mezi např. "Content-Transfer-Encoding:" a "base64" NESMÍ BÝT MEZER!!! TOTO TEDY NEFUNGUJE!!! $header .= "Content-Type: application/pdf; name=\"".$filename."\"\n"; $header .= "Content-Transfer-Encoding: base64\n"; $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\n\n"; Snad někomu ulehčím život, Luďa |
||
abc Profil |
#14 · Zasláno: 16. 4. 2013, 23:03:53
Ahoj,
to ale bohužel není pravda. Teď jsem to zkoušel a bez mezer mi tam mail došel bez problému. Mimochodem místo \n je lepší používat PHP_EOL .
|
||
juriad Profil |
#15 · Zasláno: 16. 4. 2013, 23:17:53
abc:
chyba, podle RFC2822 musíš používat sekvenci: \r\n
Header fields are lines composed of a field name, followed by a colon (":"), followed by a field body, and terminated by CRLF. |
||
abc Profil |
#16 · Zasláno: 16. 4. 2013, 23:32:35
juriad:
Pravdu díš. Každopádně s tou mezerou skutečně pravdu nemá. |
||
Jan Tvrdík Profil |
#17 · Zasláno: 16. 4. 2013, 23:34:40
|
||
abc Profil |
Jan Tvrdík:
Achjo, ja jdu raději spát. Samozřejmě jsem chtěl napsat: zkoušel jsem to s mezerou a taky mi to tam došlo :-) EDIT: pro jistotu zkoušeno i bez mezery se stejným výsledkem |
||
Davex Profil |
#19 · Zasláno: 16. 4. 2013, 23:49:41
juriad:
„chyba, podle RFC2822 musíš používat sekvenci: \r\n“ Podle RFC ano, ale neplatí to pro funkci mail() , která e-mail předává v Linuxu programu sendmail, který očekává konce řádku \n . Na starších systémech dělá \r\n problémy, protože se automaticky před každé \n přidává \r a vzniká nesmysl \r\r\n . Ve Windows se odesílá přes SMTP, kde se očekává podle RFC \r\n , takže proto se v hlavičce hodí konstanta PHP_EOL .
|
||
Časová prodleva: 11 let
|
0