Kdo chtěl vědět....

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