Autor Zpráva
cobber
Profil
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
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
nethor:
díky za snahu i za tip, vyzkouším
Davex
Profil
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);
cobber
Profil
Davex:

Díky za tip, vyzkouším. Vše dobré v Novém roce !
cobber
Profil
Davex:
Tak Davexi, dík, zabralo to .... tisíceré díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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