PHP: adres e-mail jako obrazek

Autor: Arkadiusz Tobiasz 15 października 2009

Często w wyniku tego, że na naszej stronie umieszczamy adres e-mail w postaci:

1
<a href="mailto:nick@adres.pl">nick@adres.pl</a>

w naszej skrzynce zaczyna pojawiać się coraz więcej SPAMU. Wiele spambotów przeszukuje strony w celu uzyskania właśnie takich adresów e-mail. W związku z tym co można zrobić, aby podać adres na swojej stronie WWW, a jednocześnie ochronić się przed niechcianymi wiadomościami?

Wiele osób zamiast małpy wstawia znacznik [at] albo na końcu adresu e-mail wstawia teskt: „USUŃ_TO”. Wygląda jednak to mało profesjonalnie. Można stworzyć formularz kontaktowy. Jest to wygodne dla użytkownika, który nie musisz kopiować adresu e-mail do swojego programu pocztowego, tylko wypełnia formularz i klika wyślij. Nigdzie też jawnie nie pokazujemy swojego adresu e-mail, więc spamboty go nie dopadną. Jednak sam skrypt formularza może zostać wykorzystany przez spamboty i w skrzynce nadal będzie pełno śmieci. Rozwiązaniem jest wykorzystanie tokena przy formularzu, ale o tym kiedy indziej.

Jednak mimo wszystko na jakiejś branżowej stronie wypada podać adres e-mail oprócz formularza kontaktowego. Ochroną przed spambotami może być podanie adresu e-mail jako obrazek. W tym celu musimy napisać bardzo prosty skrypt, który nazwiemy email.php, a jego kod wygląda tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

header("Content-type: image/png");
$user = $_GET['user'];
$domain = $_GET['domain'];

$email = $user . "@" . $domain;

$im = imagecreatefrompng("img/email.png");
$black = imagecolorallocate($im, 0, 0, 0);
$px = (imagesx($im) - 7.5 * strlen($email)) / 2;
imagestring($im, 3, $px, 1, $email, $black);
imagepng($im);
imagedestroy($im);
?>

Skrypt, aby wyświetlić adres e-mail w formie obrazka musi otrzymać dwie zmienne nazwę użytkownika i domenę, w której mamy pocztę. Oprócz tego musimy stworzyć prostokącik o wielkości 180×14 pikseli w kolorze tła twojej strony lub innym. Nasze zmienne podstawiane są do kolejnej zmiennej $email, która jest umieszczana na prostokąciku i w taki sposób tworzony jest kolejny obrazek.

W jaki sposób korzystać z powyższego skryptu? Oto przykładowe użycie:

1
2
3
4
5
if(ereg("([-A-Za-z0-9_.]*)([@]{1})([-A-Za-z0-9_.]*)", $email, $mail)){
   $user = $mail[1];
   $domain = $mail[3];
}
                echo '<b>Adres e-mail:</b> <img src="email.php?user='.$user.'&domain='.$domain.'" alt=""><br>';

Na początku dzielimy adres e-mail na dwie części, aby móc podstawić odpowiednie zmienne przy odwołaniu do skryptu. W taki oto sposób nasz e-mail będzie widoczny dla innych jako obrazek.

Jeden komentarz

  1. […] na zabezpieczenie adresów e-mail na stronach, skryptach przed robotami spamowymi. Pisałem już o wyświetlaniu adresu e-mail na stronie w postaci obrazka, a teraz chciałbym pokazać Ci prostą funkcję, która choć trochę zabezpieczy Cię przed […]

Odpowiedz

 

Arkadiusz Tobiasz student Akademii Ekonomicznej im. Karola Adamieckiego w Katowicach na specjalnościach informatyka ekonomiczna oraz rachunkowość. Więcej...

jQuery Validation i funkcja remote

Jakiś czas temu zwrócił się do mnie użytkownik z problemem. Chodzi o to, że korzysta on z pluginu walidacji jQuery, […]

Zend Framework: integracja z Uploadify

W tym wpisie postaram się przedstawić Wam w jaki sposób zintegrować skrypt Uploadify z Zend Frameworkiem. Dzięki temu będziemy mogli […]

Javascript: Czasowe wyświetlanie reklamy

Czasami chcemy, aby na pewnym elemencie naszej strony wyświetlała się reklama przez jakiś czas, a następnie zniknęła. W tym wpisie […]

Linux: backup wszystkich baz danych MySQL

Swego czasu pisałem o tym jak z poziomu konsoli można szybko i przyjemnie zrobić backup bazy MySQL. Wszystko jest ładnie […]