GMail SMTP authentication bez PEAR (safe_mode On)

No Comments

Witam po krótkiej (huh…) przerwie. Niektórym może przydać się ten post, dlatego pojedziemy telegraficznym skrótem, bez szczególnego zagłębiania się detale.
Stanąłem ostatnio przed koniecznością wysyłania z poziomu PHP e-maili z uwierzytelnianiem SMTP, przez GMail. Pierwsza myśl – PEAR.
Bez problemu, utworzenie testowego skryptu, wysłanie maila – działa. Wrzucenie tego samego kodu do działającej aplikacji – nie działa. Dlaczego? Jak się okazało, nasza aplikacja musi pracować przy włączonym safe_mode, zaś PEAR przy wyłączonym :)

Metodą prób i błędów, a raczej komunikatów o błędach, dotarłem do sedna sprawy. Oczywiście przedstawiony tu sposób jest tylko jednym z wielu.

Po pierwsze, należy się zaopatrzyć w odpowiednie narzędzia, czyt. klasy PHP. Pisać od nowa nie ma najmniejszego sensu. W moim przypadku były to:

Mając to wszystko, wystarczy tylko kierować się zaleceniami ze skryptu testowego klasy smtp.php. W przypadku GMaila, kod będzie wyglądał mniej-więcej tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require("smtp.php");
require("sasl.php");
 
$smtp=new smtp_class;
 
$smtp->host_name = "gmail-smtp.l.google.com";
$smtp->host_port = 587;
$smtp->start_tls = 1;
$smtp->user      = "!nazwa_uzytkownika!";
$smtp->password  = "!haslo!";
// tu reszta ustawień, do znalezienia w skrypcie testowym
// http://www.phpclasses.org/browse/file/31.html
 
$from = "adres@mailowy.nadawcy";
$to   = "adres@mailowy.odbiorcy";
 
$from_name = "Nazwa Nadawcy";
$to_name   = "Nazwa Odbiorcy";
 
if($smtp->SendMessage(
  $from, 
  array($to), // jak widac, mozna dodaj wiecej odbiorcow
  array(
    "From: $from_name <$from>",
    "To: $to_name <$to>",
    "Subject: $temat_maila",
    "Date: ".strftime("%a, %d %b %Y %H:%M:%S %Z")
  ),
  $body))
    echo "Wiadomosc wyslana do $to.\n";
  else
    echo "Nie mozna bylo wyslac wiadomosci do $to.\nOdpowiedz serwera: ".$smtp->error."\n";

DISCLAIMER, czy jakmutam: Podałem tylko te opcje konfiguracyjne, które wyróżniają GMaila. Resztę należy ustawić standardowo, według instrukcji z skryptu testowego. Nie chcę być posądzony o plagiat – nie chodziło mi o przedstawianie samego mechanizmu uwierzytelniania SMTP, czy wysyłania maili przez SMTP. Nie jestem autorem tych klas, zaś moja ingerencja w powyższy kod była znikoma.

Categories: PHP, Zabawy z kodem

Leave a Reply

Your email address will not be published. Required fields are marked *