Kdo chtěl vědět....
2 příspěvky
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Kdo chtěl vědět jak odesílat mail z přílohou??? Lukasik harry-potter.euweb.cz opsáno z www.interval.cz <HEAD> <TITLE>Mail s prilohou</TITLE> </HEAD> <BODY> <? if ($akce == "Odeslat") { /* Bylo stisknuto tlacitko Odeslat */ if ($soubor_name == "") { /* nebyla vybrana priloha, posleme e-mail obycejne */ if (mail ("$prijemce", 'Zpráva z webu', "$dopis", "From: $odesilatel")) { print "<h3>E-mail byl úspěšně odeslán!</h3>"; } else { print "<h3>E-mail se nepodařilo odeslat!</h3>"; } } else { /* priloha byla vybrana */ /* nejprve sestrojime hlavicky */ $envelope["from"] = "$odesilatel"; $envelope["to"] = "$prijemce"; /* 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 */ Copy($soubor, $soubor_name); /* uploadnuty soubor zkopirujeme z docasneho adresare */ $f = fopen ($soubor_name, "r"); /* otevren pro cteni */ $obsah = fread ($f, filesize($soubor_name)); /* nacteme obsah do promenne */ fclose ($f); $part2["type"] = TYPEAPPLICATION; $part2["encoding"] = ENCBINARY; $part2["subtype"] = "octet-stream"; $part2["description"] = basename($soubor_name); $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] = $part2; $body[3] = $part3; /* 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 ("$prijemce", 'Zpráva z webu', $telo, $hlavicka)) { print "<h3>E-mail byl úspěšně odeslán!</h3>"; } else { print "<h3>E-mail se nepodařilo odeslat!</h3>"; } } } ?> <HR SIZE=1 NOSHADE> <FORM ACTION="send.php" METHOD="post" ENCTYPE="multipart/form-data"> Odesílatel: <INPUT TYPE="text" NAME="odesilatel" VALUE="" SIZE=50 MAXLENGTH=50><BR> Příjemce: <INPUT TYPE="text" NAME="prijemce" VALUE="" SIZE=50 MAXLENGTH=50><BR><BR> Text:<BR> <TEXTAREA NAME="dopis" COLS="50" ROWS="10"></TEXTAREA><BR> Soubor: <INPUT TYPE="file" NAME="soubor"> <BR> <INPUT TYPE="submit" NAME="akce" VALUE="Odeslat"><BR> </FORM> </BODY> Spuštění skriptu Tento skript jsem zprovoznil a otestoval na IIS 5.0 a PHP 4.0.6. Ke stažení je k dispozici zde. Pokud se vám stane, že vám skript nebude fungovat (bude se vypisovat hláška, že nezná funkci imap_mail_compose), zkontrolujte si nejprve nastavení v souboru php.ini: zdali máte nastaveny správně direktivy SMTP a sendmail_from v bloku "mail function". (důležité pro funkci Mail) dále si zkontrolujte a případně nastavte direktivu file_uploads=On v bloku "Paths and Directories" nastavte direktivu extension_dir na adresář, ve kterém máte rozšiřující DLL knihovny, zpravidla extension_dir="C:\PHP\extensions" - kdyby jste pochybovali o jaký adresář jde, je to ten, v němž se vyskytuje soubor php_imap.dll - to je právě knihovna, bez níž vám nebude fungovat funkce imap_mail_compose. ve stejném bloku nastavte (pokud již tak není) direktivu enable_dl=On nakonec najděte odstavec Windows extensions a odkomentujte řádek s textem extension=php_imap.dll (tj. odstraňte středník ze začátku řádku) Po splnění všech kroků by vám měla ve skriptu fungovat funkce imap_mail_compose. Příloha se pošle jako binární bez ohledu na to, jestli je poslán text, nebo obrázek. Skript se dá samozřejmě rozšířit - podle MIME typu přiloženého souboru (zjistili byste v proměnné $soubor_type) byste mohli rovnou nastavit správný MIME typ přílohy. Toto je nejjednodušší skript, který posílá jen jednu přílohu. Pokud byste chtěli poslat příloh více, pak je řadíte za sebou do pole $body. Upozorňuji, že ve skriptu není ošetřen uživatelský vstup a tedy dříve, než data ve skriptu zpracujete do e-mailové zprávy, je potřeba vstupní data zkontrolovat, zdali neobsahují nevhodná či nebezpečná data.
-
To já - díky - zkusím