Formularze - HTML
Wysłanie formularza bez programu pocztowego
Jak wysłać formularz na wskazany adres e-mail bez używania programu pocztowego?
Do wysyłania formularzy opisanych w tym rozdziale konieczny jest program pocztowy, np. MS Outlook, Mozilla Thunderbird lub inny. Program taki musi posiadać zainstalowany i skonfigurowany w swoim systemie operacyjnym użytkownik, który chce wysłać do nas formularz pocztowy. Problem w tym, że część użytkowników w ogóle takiego programu nie posiada, ponieważ swoją pocztę odczytują za pomocą tzw. aplikacji webmail, czyli specjalnej strony WWW. Takie strony-aplikacje udostępniają wszystkie duże portale oferujące darmowe konta e-mail.
Użytkownicy, którzy nie posiadają skonfigurowanego programu pocztowego, ponieważ np. korzystają z systemu webmail, nie będą w stanie wysłać formularza pocztowego.
Jak się przed tym zabezpieczyć? W języku HTML ani nawet JavaScript nic nie da się zrobić. Z pomocą przychodzą skrypty obsługiwane po stronie serwera, jak np. PHP. Aby skorzystać z tego rozwiązania, serwer na którym znajduje się strona przede wszystkim musi obsługiwać PHP. Niestety nie jest to normą. Co więcej, funkcja służąca do wysyłania listów e-mail (pod nazwą: mail) za pośrednictwem skryptów PHP musi być włączona. Niestety administratorzy, zwłaszcza darmowych serwerów, czasami blokują tę funkcję, aby konta nie były wykorzystywane do rozsyłania spamu. O tym, czy Twój serwer WWW obsługuje skrypty PHP i czy funkcja mail nie została zablokowana, możesz się zwykle przekonać odwiedzając stronę domową danego serwera lub kontaktując się z administratorem serwera.
Jeżeli Twój serwer nie obsługuje skryptów PHP albo funkcja mail wysyłająca listy elektroniczne jest zablokowana, jedynym rozwiązaniem dla Ciebie będzie skorzystanie z darmowych komponentów przetwarzających dowolne formularze i wysyłających wynik na wskazany adres e-mail. Jedyne co musisz w takim przypadku zrobić, to zarejestrować się w wybranym serwisie, który oferuje takie komponenty i założyć, a potem skonfigurować odpowiedni komponent.
Przedstawiony poniżej opis zakłada, że Twój serwer jednak obsługuje skrypty PHP, a funkcja mail nie została zablokowana. Ponadto zwracam uwagę, że poniższy skrypt zadziała dopiero po wprowadzaniu strony na serwer WWW. Nie będzie można go przetestować na swoim dysku lokalnym, a co więcej sam wygląd formularza może być wtedy nieprawidłowy.
Aby wysłać formularz bez pośrednictwa programu pocztowego, należy utworzyć normalną stronę HTML, a następnie w wybranym miejscu dokumentu wstawić poniższy kod zawierający formularz. Ważne jest tylko, aby plikowi nadać rozszerzenie *.php (czyli np. formularz.php), a nie *.html. Jeżeli nie dopełnisz tego warunku, skrypt nie zadziała!
<?php if ($_POST) { ////////// USTAWIENIA ////////// $email = 'adres e-mail gdzie wysłać formularz'; // Adres e-mail adresata $subject = 'temat'; // Temat listu $message = 'Dziękujemy za wysłanie formularza'; // Komunikat $error = 'Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu $charset = 'utf-8'; // Strona kodowa ////////////////////////////// if (!isset($_POST['captcha']) || $_POST['captcha'] != '') echo $error; else { unset($_POST['captcha']); $head = "MIME-Version: 1.0\r\n" . "Content-Type: text/plain; charset=$charset\r\n" . "Content-Transfer-Encoding: 8bit"; $body = ''; foreach ($_POST as $name => $value) { if (is_array($value)) { for ($i = 0; $i < count($value); $i++) { $body .= "$name=" . (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n"; } } else $body .= "$name=" . (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n"; } echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error; } } else { ?> <form action="?" method="post"> Tutaj umieść wszystkie pola formularza <input name="captcha" style="display: none"> </form> <?php } ?>
- adres e-mail gdzie wysłać formularz
- Twój adres poczty elektronicznej e-mail.
- temat
- Tytuł, jaki będzie nosił formularz, tzn. temat listu, który otrzymasz, kiedy formularz zostanie wysłany.
- Dziękujemy za wysłanie formularza
- Komunikat, który zostanie wyświetlony użytkownikowi po wysłaniu formularza. W jego treści można używać dowolnych znaczników HTML.
- Wystąpił błąd podczas wysyłania formularza
- Komunikat, który zostanie wyświetlony użytkownikowi w przypadku wystąpienia błędu. W jego treści można używać dowolnych znaczników HTML.
- utf-8
- Wartość, która musi być identyczna jak strona kodowa dokumentu HTML, w którym znajduje się formularz. Warto zauważyć, że jeśli prawidłowo wypełnisz tę wartość, nie powinno być żadnych problemów z wysyłaniem formularzy zawierających polskie znaki diakrytyczne, jak to ma miejsce w przypadku prostego formularza pocztowego.
- Tutaj umieść wszystkie pola formularza
- Właściwa zawartość formularza, utworzona w tradycyjny sposób.
Zwróć uwagę na specjalną formę znacznika <form>...</form>
- nie należy nic w niej zmieniać. We właściwej treści formularza nie wolno już umieszczać drugiego znacznika <form>...</form>
. Zauważ także, że za znacznikiem zamykającym </form>
znajduje się jeszcze dodatkowy krótki blok kodu. Nie zapomnij go wpisać! Ponadto nie usuwaj z formularza następującego pola:
<input name="captcha" style="display: none">
Jest to proste zabezpieczenie przeciwko botom, które mogą próbować automatycznie wysyłać formularz, przez co na Twoją skrzynkę e-mail mogłoby lądować sporo spamu.
Jeżeli w formularzu takim znajdują się pola wyboru (<input type="checkbox">
) albo lista rozwijalna z możliwością wyboru kilku opcji - typ rozszerzony (<select multiple>...</select>
), na końcu nazwy każdego pola typu checkbox oraz w nazwie takiego elementu select, obowiązkowo należy postawić pusty nawias kwadratowy: []. Wewnątrz tych nawiasów nie może być żadnego znaku, nawet spacji!
Na przykład:
<p>Jaką lubisz muzykę (możesz zaznaczyć więcej możliwości)?</p> <input type="checkbox" name="Muzyka[]" value="Rock">Rock<br> <input type="checkbox" name="Muzyka[]" value="Heavy Metal">Heavy Metal<br> <input type="checkbox" name="Muzyka[]" value="Pop">Pop<br> <input type="checkbox" name="Muzyka[]" value="Techno">Techno<br> <input type="checkbox" name="Muzyka[]" value="Muzyka poważna">Muzyka poważna<br> <input type="checkbox" name="Muzyka[]" value="Inna">Inna (podaj jaka): <input name="Muzyka[]"> <p>Jakie znasz systemy operacyjne (możesz wybrać kilka opcji trzymając klawisz Ctrl)?</p> <select name="System operacyjny[]" multiple size="3"> <option selected>Dos</option> <option>Windows</option> <option>Linux</option> <option>Inny</option> </select>