Autor | Zpráva | ||
---|---|---|---|
cobber Profil |
#1 · Zasláno: 19. 12. 2013, 15:10:41
Dobrý den,
na webu s RS Drupal mám modul, který po vaplnění formuláře generuje PDF dokument a ten se buď zobrazí v prohlížeči nebo se odesílá e-mailem návštěvníkovi stránek. Generování kódu je zcela stejné pro obě větve. U varianty s e-mailem však dále používám funkci imap_mail_compose() na konci již známého scriptu. Potíž je v tom, že v došlém e-mailu se zpráva zobrazí rozpadeně viz. níže. Může mi někdo poradit ? Tělo výsledné zpráva v e-mail klientovi Content-Type: TEXT/plain; CHARSET=US-ASCII Content-Description: text Dobry den, posíláme Vám etiketu z portálu www.mojedomena.cz Děkujeme za využití etikety a přejeme.. Content-Type: APPLICATION/pdf Content-Transfer-Encoding: BASE64 Content-Description: 1210895_79.pdf Content-Disposition: attachment JVBERi0xLjcKJeLjz9MKOCAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50 IDEgMCBSIC9MYXN0TW9kaWZpZWQgKEQ6MjAxMzEyMTkxNDM0MzArMDEnMDAn KSAvUmVzb3VyY2VzIDIgMCBSIC9NZWRpYUJveCBbMC4wMDAwMDAgMC4wMDAw ......... Kód $envelope["from"] = "info@mojedomena.cz"; $envelope["to"] = $email_kliose; /* nyni sestrojime nekolik casti dopisu */ /* 1. cast - uvodni, tou rekneme, ze dopis ma vice casti s ruznymi typy dat */ $part1["type"] = TYPEMULTIPART; $part1["subtype"] = "mixed"; /* 2. cast - do dopisu pripojime prilohu */ /* nejprve zadany soubor nacteme */ $obsah = $pdf->Output($nazev_etikety,'S'); /* nacteme obsah do promenne */ $dopis ='Dobry den, posíláme Vám etiketu z portálu www.mojedomena.cz Děkujeme za využití portalu a přejeme.. '; $part2["type"] = TYPEAPPLICATION; $part2["encoding"] = ENCBINARY; $part2["subtype"] = "pdf"; $part2["description"] = $nazev_etikety; $part2['disposition.type'] = 'attachment'; $part2['dparameters.filename'] = $nazev_etikety; $part2['parameters.name'] = $nazev_etikety; $part2["contents.data"] = "$obsah"; /* 3. cast - do dopisu vlozime zadany text */ $part3["type"] = TYPETEXT; $part3["subtype"] = "plain"; $part3["description"] = "text"; $part3["contents.data"] = $dopis; /* Cely dopis ulozime do pole body */ $body[1] = $part1; $body[2] = $part3; $body[3] = $part2; /* celou zpravu vytvorime a ulozime do promenne $zprava: */ $zprava = imap_mail_compose($envelope, $body); /* drive nez posleme zpravu funkci Mail musime rozdelit zvlast hlavicku a zvlast telo: */ $pom = StrPos($zprava, "\r\n\r\n"); $hlavicka = SubStr($zprava, 0, $pom+2); $telo = SubStr($zprava, $pom, StrLen($zprava) - $pom); if (mail ( $email_kliose, 'Etiketa - www.mojedomena.cz', $telo, $hlavicka)) { |
||
nethor Profil |
#2 · Zasláno: 19. 12. 2013, 21:01:33
cobber:
Zmíněné 'Tělo výsledné zpráva v e-mail klientovi' vypadá jako část zdroje zprávy, to může způsobit nejaká chybějící nebo špatná hlavička. Další zradu vidím v 'Content-Type: TEXT/plain; CHARSET=US-ASCII'. pro českou diakritiku bych použil utf-8. Pro odesílání mailů s přílohou používám již hotovou třídu PHPmailer. Doporučuji použít ji, většina věcí jde snadno nastavit. |
||
cobber Profil |
#3 · Zasláno: 20. 12. 2013, 12:20:59
nethor:
díky za snahu i za tip, vyzkouším |
||
Davex Profil |
#4 · Zasláno: 20. 12. 2013, 19:21:34
cobber:
Zřejmě běží skript na serveru, jehož zastaralý pošťák přidává před odesláním přes SMTP znak CR ( \r ) před každý znak LF (\n ), vysvětlení jinde.
Mělo by se to vyřešit nahrazením kombinace znaků CRLF ( \r\n ) za správný znak uložený v předdefinované konstantě PHP_EOL .
$hlavicka = str_replace("\r\n", PHP_EOL, $hlavicka); $telo = str_replace("\r\n", PHP_EOL, $telo); |
||
Časová prodleva: 13 dní
|
|||
cobber Profil |
#5 · Zasláno: 2. 1. 2014, 15:45:13
Davex:
Díky za tip, vyzkouším. Vše dobré v Novém roce ! |
||
cobber Profil |
#6 · Zasláno: 2. 1. 2014, 23:56:37
Davex:
Tak Davexi, dík, zabralo to .... tisíceré díky |
||
Časová prodleva: 11 let
|
0