Jak v PHP poslat e-mail s přílohou
21. 08. 2001 | Jaromír Skřivan | PHP | Komentáře: 3
Vedle uploadu souboru na server se mi v e-mailové schránce objevovaly i dotazy na poslání nějakého souboru e-mailem. Dnešním článkem se pokusím všem, co mi psali, dát odpověď. Uvedu jednoduchý skript, který uživateli umožní vedle zadání e-mailové adresy, také výběr souboru, který bude chtít poslat. Vybraný soubor se zadaným textem zprávy bude odeslán na danou e-mailovou adresu.
Nejprve malé zopakování
Standardní funkcí pro odeslání e-mailu ze skriptu je funkce mail. Její syntaktický zápis vypadá následovně:
|
První tři argumenty jsou povinné. Jsou jimi adresa, komu se e-mail posílá (To), druhý představuje název dopisu (Subject) a třetí vlastní tělo dopisu (Message). Další dva parametry jsou již nepovinné. Prvním jsou přídavné hlavičky (např. X-Web, X-Office, X-Mailer, apod.) a posledním parametry. Příklad použití funkce mail je následující:
|
Když chceme s e-mailem poslat i přílohu
Pokud chceme poslat i přílohu, pak nám jenom funkce mail nestačí. Nejprve musíme použít funkci imap_mail_compose pro sestavení MIME dopisu. Funkce vypadá následovně:
|
Funkce má dva parametry. Prvním z nich jsou hlavičky (Envelope) a druhý parametr je vlastní tělo (Body) specifikující jednotlivé části dopisu. Oba argumenty jsou typu pole.
Formulář
Nejprve uvedu formulář, který bude sloužit uživateli k tomu, aby mohl napsat dopis a připojit k němu jeden soubor.
|
Uvedený kód zobrazí na stránce následující formulář:
Skript send.php
Uživatel vyplní odesílatele a příjemce, napíše vlastní obsah zprávy a vybere soubor jako přílohu. Po stisku tlačítka Odeslat skript send.php vytvoří pomocí funkce imap_mail_compose MIME dopis, a teprve poté s použitím funkce mail pošleme e-mail i s vybranou přílohou. Skript samozřejmě ošetří i případ, že žádna příloha vybrána nebyla. Následuje celý kód skriptu send.php, bližší popis uvedu formou komentářů přímo ve skriptu.
|
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.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Další aktuální články na interval.cz
- Malware: android pod palbou, mobily v ohrožení?
- Pozvánka na Microsoft TechDays 2012
- Reklamní slepota: co to je a jak s ní bojovat?
- Pět důvodů, proč vybrat redakční systém Drupal
- Čeština pro WordPress 3.3.1 k dispozici
Tematicky související články
- Jak v PHP poslat e-mail s přílohou pomocí MIME třídy
- Jak poslat textovou zprávu prostřednictvím PHP
- Jednoduchý upload souboru na server pomocí PHP
- Fotoalbum v PHP - manipulace s fotografiemi 2.
- Fotoalbum v PHP - manipulace s fotografiemi 1.
Dejte vědět i ostatním o článku
Komentáře ke článku
Datum vložení: 17. Říjen 2010, 18:39:49
mohl bys te skontrolovat email jestli by sel ?
Datum vložení: 05. Červen 2011, 20:34:36
Hmm, tento popis je orientován na Windows, PHP však většinou běží na unix systémech, např. Linux... Jak tedy tam s imap_mail_compose?
Datum vložení: 03. Prosinec 2011, 21:43:39
ahoj jsem radek rad bych vas lepe poznal chodim na lide nebo fc pod adresou radekhunka75@seznam.cz pokud mate zajem tak se ozvete dekuji

