Jacekk.info - O stronach internetowych wiemy wszystko

Wysyłanie wiadomości e-mail ze strony

Jacek | 2009-05-16 15:13:32

Zakładam, że istnieje gotowy formularz, np. takiej treści:

<form action="wyslij.php" method="post">
<p>
Imię i nazwisko: <input type="text" name="imie" /><br />
Twój e-mail: <input type="text" name="mail" />
</p>

<p>
Temat wiadomości: <input type="text" name="temat" size="50" /><br />
Treść:<br />
<textarea name="tresc" rows="10" cols="80"></textarea>
</p>

<p><input type="clear" value="Wyczyść" />
<input type="submit" value="Wyślij" /></p>
</form>

Teraz potrzebne są pliki wyslij.php i is_email.php (więcej na ten temat), które dokonają dzieła. wyslij.php wygląda tak:

<?php
include('is_email.php');
$wyslij_do = 'gdzie@wyslac.pl';
$kodowanie = 'iso-8859-2';

// Sprawdzamy dane...
if( strlen($_POST['imie'])>50 || strlen($_POST['temat'])>80
   || strlen($_POST['tresc'])>8000 ) {
   echo 'Jedno z pól zawiera zdyt wiele znaków
      (limity: imię - 50 znaków, temat - 80 znaków, treść 8000 znaków).';
}
elseif( empty($_POST['imie']) || empty($_POST['mail'])
   || empty($_POST['temat']) || empty($_POST['tresc']) ) {
   echo 'Wymagane jest wypełnienie wszystkich pól!';
}
elseif( !is_email($_POST['mail']) ) {
   echo 'Błędny adres e-mail';
}
else
{
   // Ustawiamy nadawcę i kodowanie znaków
   $headers = 'From: =?'.$kodowanie.'?B?'
      . base64_encode($_POST['imie']).'?= <'.$_POST['mail'].'>'."\\r\\n"
      . 'Content-Type: text/plain; charset='.$kodowanie;
   
   // ... i wysyłamy wiadomość
   if( !mail($wyslij_do, '=?'.$kodowanie.'?B?'.base64_encode($_POST['temat']).'?=',
      $_POST['tresc'], $headers) ) {
      echo 'Wystąpił problem z wysłaniem wiadomości!';
   }
   else
   {
      echo 'Wiadomość została wysłana';
   }
}
?>

Skąd się biorą konstrukcje a'la

'=?'.$kodowanie.'?B?'.base64_encode($_POST['temat']).'?='

Poczta elektroniczna od samego początku jest siedmiobitowa, oznacza to, że dostępnych jest tylko 128 znaków (ASCII) do zakodowania. Nie ma wśród nich polskich ogonków. W związku z tym powstały techniki pozwalające zakodować tradycyjny oktet (= osiem bitów = jeden bajt) w siedmiobitowym kodowaniu. Jedną z nich jest Base64 (=?kodowanie?B?zakodowany_tekst?=), drugą Quoted-Printable (=?...?Q?...?=). Ponieważ funkcja base64_encode() jest w PHP zawsze dostępna, właśnie ona została wykorzystana.



© by Jacek Kowalski Sponsor: poszukiwany

Menu

Strona

Artykuły

Skrypty PHP

Przydatne kody

Wstawki

Informacje

Poprawny XHTML 1.1

Linki