| 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: 13 let
|
|||
0