Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  PHP v praxi, 24. díl - E-mail
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
Chcete vědět, jak se posílá pošta přes webové stránky? V tomto díle se dozvíte i nejčastější problémy s touto PHP funkcí.

Veselý Jan - 15.03.2002 - tutorial - Rubrika: PHP
Předchozí díl: PHP v praxi, 23. díl - Tvorba fotoalba
Seriál: 
Následující díl: PHP v praxi, 25. díl - Třídy a e-mail s přílohou

Naším dnešním úkolem bude seznámit se se základy odesílání pošty přes webový formulář. Není na tom nic složitého, ale najdou se určité rány pod pás, jež nás obvykle stojí mnoho času.

Než začneme pracovat na skriptu, je důležité umožnit odesílání e-mailů přes PHP. Nezbývá nám nic jiného, než zeditovat php.ini:

  1. nastavit "extension_dir" na správný adresář , např: extension_dir = "c:\php\extensions\" (358)
  2. odkomentovat "extension=php_imap.dll" (438)
  3. nastavit server pro odesílání pošty SMTP = smtp.vas_provider.cz (476)
  4. napsat svoji e-mailovou adresu za "sendmail_from =" (479)

Osnovou celého skriptu bude následující podmínka:

if (!isset($submit)) formular();
else posli($mail);

Funkce formular() zobrazí HTML formulář, do kterého napíšeme údaje o odesílateli, příjemci, předmět e-mailu a samotný text. Informace odešleme tlačítkem submit té samé stránce. Proto se vytvoří proměnná $submit a podmínka bude nepravdivá. Zavolá se funkce posli(), obsahující veškeré informace z formuláře v poli $mail[]. Použitím pole si zde výrazně usnadníme práci - při každé změně vkládaných informací bychom jinak stále museli měnit i parametry této funkce.

function posli($mail)
{
    $hlavicka = "From: $mail[odesilatel]\r\n";
    $hlavicka.= "Reply-To: $mail[odesilatel]\r\n";
    $hlavicka.= "X-Mailer: php-mailer";
    mail ("$mail[adresa]", "$mail[predmet]", "$mail[telo]", "$hlavicka") 
    	or die ("error");
    echo "OK";
}

Základem je samozřejmě PHP funkce mail(), na tu se podívame podrobněji.

bool mail ( string to, string subject, string message [, string additional_headers])

Toto je definice z manuálu, je důležité ji umět přečíst. Před funkcí je slůvko bool - to značí, že funkce udává výsledek ve formě boolean, čili pravda nebo nepravda. Jednoduše: když se e-mail podaří odeslat, rovná se funkce pravdě (1), jinak nepravdě (0). V závorkách jsou uvedené parametry - všechny jsou stringy (řetězce). První je e-mailová adresa příjemce, druhý je předmět zprávy, třetí samotná zpráva. Tyto jsou povinné, v hranatých závorkách jsou parametry volitelné. V tomto případě informace v hlavičce, bez kterých se sice můžeme obejít, ale není to to nejlepší řešení.

Tyto informace jsou pro přehlednost dosazeny do proměnné $hlavicka. Všimněte si, že nejprve je v každém řádku určité slovo (např. From:), pak samotná informace a každý řádek končí \r\n (\r = carriage return, \n = linefeed; jedná se o ukončování řádků). S tímto je asi největší trápení: pokud váš smtp server pracuje pod Windows, je funkční právě tato syntaxe, Linuxový server si vystačí s \n.

<?
function formular()
{
 ?>
<form action="<?= $PHP_SELF ?>" method="post">
  <table width="400" border="1" cellpadding="5" align="center">
    <tr> 
      <td colspan="2" align="center">php mailer</td>
    </tr>
    <tr> 
      <td>adresa příjemce:</td>
      <td> 
        <input type="text" name="mail[adresa]">
      </td>
    </tr>
    <tr> 
      <td>adresa odesílatele:</td>
      <td> 
        <input type="text" name="mail[odesilatel]">
      </td>
    </tr>
    <tr> 
      <td>předmět:</td>
      <td> 
        <input type="text" name="mail[predmet]">
      </td>
    </tr>
    <tr> 
      <td>text:</td>
      <td> 
        <textarea name="mail[telo]" cols="50" rows="10"></textarea>
      </td>
    </tr>
    <tr> 
      <td colspan="2" align="center"> 
        <input type="submit" name="submit" value="odeslat">
      </td>
    </tr>
  </table>
</form>
 <?
}

function posli($mail)
{
    $hlavicka = "From: $mail[odesilatel]\r\n";
    $hlavicka.= "Reply-To: $mail[odesilatel]\r\n";
    $hlavicka.= "X-Mailer: PHP";
    mail ("$mail[adresa]", "$mail[predmet]", "$mail[telo]", "$hlavicka") 
    	or die ("error");
    echo "OK";
}


if(!isset($submit)) formular();
else posli($mail);

?>

Používání funkce mail() je velice časté, proto je nutné ji zprovoznit. Především k tomu měl sloužit dnešní návod, příště se podíváme na odesílání e-mailu s přílohou.

Veselý Jan


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.71 (3623)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku
Vlada09.03.14:49opačný problém
Marek08.05.18:43Mail odosielatela
Zdeněk14.08.18:29Odesílání emailu přes PHP
Martin20.11.23:28RE: Odesílání emailu přes PHP
TimJ20.06.14:09DIAKRITIKA
majkl11.07.16:29RE: DIAKRITIKA
szs14.02.12:29RE: RE: DIAKRITIKA
kalan06.05.13:22A s vlastním smtp serverem?
Karel Dohnal06.03.12:05RE: A s vlastním smtp serverem?
profík26.04.22:39RE: A s vlastním smtp serverem?
Ondra Kelka17.04.14:18Proc nastavit?
Jan Vesely17.04.15:47RE: Proc nastavit?
Dragon09.09.12:08RE: Proc nastavit?
Lama29.03.13:11Odeslani vice prijemcum.
Jan Vesely29.03.14:22RE: Odeslani vice prijemcum.
lama28.03.22:29Dotaz na php
Jan Veselý28.03.23:25RE: Dotaz na php
Gerry17.03.19:42mail a SMS
Jan Vesely17.03.23:25RE: mail a SMS
Martin Ler17.03.23:37RE: RE: mail a SMS
TimJ20.06.14:07RE: RE: RE: mail a SMS
Scalpelexis26.04.22:45RE: RE: mail a SMS
TimJ08.05.22:23RE: RE: RE: mail a SMS
brano05.11.1:15RE: RE: RE: RE: mail a SMS
ftl12.01.10:19RE: RE: RE: RE: RE: mail a SMS
JirkaDJ01.06.18:50RE: RE: RE: RE: RE: RE: mail a SMS
kucikk01.09.12:50RE: RE: RE: RE: RE: RE: RE: mail a SMS
aladdin25.07.17:45RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
BOBer21.03.10:24RE: RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
kucikk02.06.19:13RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
martin20.11.23:37RE: RE: RE: RE: RE: RE: mail a SMS
android24.11.0:13RE: RE: RE: RE: RE: RE: RE: mail a SMS
neo04.02.10:50RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
jaa08.04.15:15RE: RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
daewoo10.04.20:34RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
GOGO04.02.14:21RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: mail a SMS
  

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!