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