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
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
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
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
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
Kódování za tebe řeší PHPMailer, takže třetí řádek není vůbec potřeba.
Luky
Profil
Davex:
Díky moc, už to funguje jak má ;)
Luďa
Profil *
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
Luďa
Profil *
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
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
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
juriad:
Pravdu díš. Každopádně s tou mezerou skutečně pravdu nemá.
Jan Tvrdík
Profil
abc:
Uvědomuješ si, že to cos napsal [#14] je zcela v souladu z [#13]? :)
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
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.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: