WebNews.cz - počítače, komunikace, mobily, internet, finance

Mapa serveru | Administrace

Odeslání formuláře e-mailem se zadanou přílohou

Michal Terč - Profil - 16.04.2002
Popis jednoho ze způsobů, jak odeslat e-mailem formulář se zadáním souboru, který má být vložen jako příloha e-mailu.

Tento článek navazuje na seriál "Odeslání libovolného formuláře e-mailem". V seriálu jsme si vytvořili skript pro odesílání libovolného formuláře e-mailem. Dnes tento skript rozšíříme o možnost odeslání libovolného souboru jako přílohy e-mailu. Ve skriptu je využit include, který vytváří v PHP třídu sloužící pro vytvoření HTML e-mailu a jeho odeslání (zdroj: http://www.zend.com). Pomocí tohoto includu lze do odesílaného e-mailu vložit i libovolnou přílohu.

Do skriptu byl doplněn následující nepovinný parametr:
$soubor ... příloha e-mailu (pouze pro HTML formát)

Tento parametr je ve formuláři uveden jako typ "file", čímž prohlížeči říkáme, že toto pole slouží pro zadání názvu souboru.

<form action="sendform.php" method="post" enctype="multipart/form-data">
<input type="file" name="soubor" size="40">
</form>

Ve skriptu pro odeslání souboru se nám parametr $soubor rozpadne na další tři parametry:
$soubor ... dočasný název zkopírovaného souboru
$soubor_name ... původní název souboru
$soubor_type ... typ souboru
$soubor_size ... velikost souboru

Do skriptu pro odeslání formuláře e-mailem byl přidán následující kód pro vložení souboru jako přílohy odesílaného e-mailu. Soubor si zkopírujeme do adresáře "temp", který musíme mít na serveru vytvořen. Po vložení souboru jako přílohy e-mailu ho můžeme smazat funkcí unlink.

// vložení přílohy, pokud je zadána
if ($soubor_name) {
if (copy ($soubor, "../temp/$soubor_name")) {
$priloha = $mail->get_file("../temp/$soubor_name");
$mail->add_attachment($priloha, $soubor_name, $soubor_type);
unlink("../temp/$soubor_name");
}
}

Vlastní část skriptu pro odeslání formuláře e-mailem ve formátu HTML se zadanou přílohou bude vypadat následovně:

if ($html == "Y") {
// pokud má být mail odeslán ve formátu HTML
$telo = "<table width=\"100%\">";
$telo .= "<tr><td><font color=\"Red\"><b>Email:</b></font></td><td>&nbsp;</td><td>$email</td></tr>";
reset($HTTP_POST_VARS);

while (list($promenna, $hodnota) = each($HTTP_POST_VARS)) {
// nahradíme konce řádků tagem <br>
$hodnota = str_replace(chr(13) . chr(10), "<br>", $hodnota);
$hodnota = str_replace(chr(10) . chr(13), "<br>", $hodnota);
$hodnota = str_replace(chr(13), "<br>", $hodnota);
$hodnota = str_replace(chr(10), "<br>", $hodnota);


// pokud parametr začíná na # nebo *, tak zapsat hodnotu do textu mailu
if (((substr($promenna, 0, 1) == "@") || (substr($promenna, 0, 1) == "#")) && ($hodnota != ""))
{ $telo .= "<tr><td valign=\"top\"><b>".substr($promenna, 1).":</b></td><td>&nbsp;</td><td>$hodnota</td></tr>"; }
}

$telo .= "</table>";
$telo .= "<p><hr></p>";
$telo .= "<p><b>Uživatelův browser:</b> $HTTP_USER_AGENT<br>";
$telo .= "<b>IP adresa, ze které přišel požadavek:</b> $REMOTE_ADDR</p>";

// odešleme mail ve formátu HTML
$mail = new html_mime_mail("X-Mailer: Html Mime Mail Class");

// vložení přílohy, pokud je zadána
if ($soubor_name) {
if (copy ($soubor, "../temp/$soubor_name")) {
$priloha = $mail->get_file("../temp/$soubor_name");
$mail->add_attachment($priloha, $soubor_name, $soubor_type);
unlink("../temp/$soubor_name");
}
}

// odešleme mail ve formátu HTML
$mail->add_html(ToISO($telo), "");
$mail->set_charset('iso-8859-2', TRUE);
$mail->build_message();
$mail->send($komu, $komu, $email, $email, ToISO($predmet));
$sendok = true;

// odeslat potvrzení
usleep(500);
$mail->send($email, $email, $email, $email, ToISO("Potvrzení - vyplnění formuláře"));
} else {
// pokud má být mail odeslán ve formátu prostého textu
..
...
}

Odeslání e-mailu s přílohou si můžete vyzkoušet zde.


Kompletní zdrojové soubory příkladu - sendform.zip (4 kB)
Základní include využité v příkladu - inc.zip (7 kB)
Definice třídy pro odeslání HTML e-mailu - html_email_class_927a.zip (11 kB)

Tisk článku - Poslat článek - (12182 zobrazení)
Redakce | | | ISSN 1213-9335 | © 2005 Developed by terc.cz