Wysyłanie wiadomości email poprzez SMTP za pomocą PHPMailera.
Teraz już raczej nikt nie korzysta z PHP-owej funkcji mail(), a jeżeli to robi, to powinien przestać. Przewagi SMTP nad natywnym mail() możnaby wymieniać godzinami, wymienię tylko 2:
- znacznie mniejsze ryzyko trafienia wiadomości do SPAM-u,
- bez zbędnych konfiguracji można wysyłać wiadomości z tzw. 'localhost', wystarczy posiadać jedynie konto pocztowe;
Do rzeczy:
1. Na samym początku trzeba się wyposażyć w bibliotekę PHPMailer, można pobrać ją stąd: https://github.com/Synchro/PHPMailer lub za pomocą composera (poniższy poradnik przedstawiony jest z perspektywy osoby która pobrała bibliotekę ręcznie)
2. Wrzucamy bibliotekę do katalogu 'phpmailer' w naszym projekcie,
3. Poniższy kod przedstawia jak za pomocą SMTP wysłać wiadomość z formularza: Prosty Formularz kontaktowy na każdą stronę zapisując go w pliku contact.php w miejsce 'starego':
<?php if(!$_POST) exit; if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n"); // Poniżej przypisywanie do naszych zmiennych, danych otrzymanych z formularza $name = $_POST['name']; $email = $_POST['email']; $phone = $_POST['phone']; $subject = $_POST['subject']; $comments = $_POST['comments']; $verify = $_POST['verify']; // Sprawdzanie wprowadzonych danych: if(trim($name) == '') { echo '<div class="error_message">Uwaga! Prosimy o podanie imienia i nazwiska.</div>'; exit(); } else if(trim($email) == '') { echo '<div class="error_message">Uwaga. Prosimy o podanie poprawnego adresu email.</div>'; exit(); } else if(trim($phone) == '') { echo '<div class="error_message">Uwaga. Prosimy o podanie numeru telefonu.</div>'; exit(); } if(trim($subject) == '') { echo '<div class="error_message">Uwaga. Prosimy o podanie tematu wiadomości</div>'; exit(); } else if(trim($comments) == '') { echo '<div class="error_message">Uwaga. Prosimy o wpisanie treści wiadomości.</div>'; exit(); } else if(!isset($verify) || trim($verify) == '') { echo '<div class="error_message">Uwaga. Prosimy o wpisanie wyniku działania.</div>'; exit(); } else if(trim($verify) != '11') { echo '<div class="error_message">Uwaga. Numer weryfikacyjny jest niepoprawny.</div>'; exit(); } if(get_magic_quotes_gpc()) { $comments = stripslashes($comments); } $msg = "Ktoś kontaktuje się z Tobą za pośrednictwem formularza na stronie.<br /> Treść wiadomości: <br /> \"$comments\"<br /><br /> <small>Możesz odpowiedzieć $name poprzez email: $email lub telefonicznie: $phone</small>"; require 'phpmailer/PHPMailerAutoload.php'; /* podajemy odpowiednia sciezke w stosunku do aktualnego pliku php */ $mail = new PHPMailer; /* GLOBALNA KONFIGURACJA PHPMailera */ $mail->isSMTP(); /* Okreslamy ze bedziemy wysylac za pomoca SMTP */ $mail->Host = 'smtp.gmail.com'; /* Pojdamy adres serwera - mozna go znalezc w dokumentacji swojego dostawcy poczty */ $mail->SMTPAuth = true; /* Uruchomienie autoryzację smtp */ $mail->Username = '[email protected]'; /* Login do poczty */ $mail->Password = '*****'; /* Haslo do poczty */ $mail->SMTPSecure = 'tls'; /* Włączamy szyfrowanie tls, można ustawić również ssl - możliwości poczty powinny być dostępne w dokumentacji dostawcy */ $mail->Port = 587; /* Port po którym skrypt ma się łączyć z kontem, przy tls jest to zazwyczaj 587, przy ssl 465 - może to się jednak różnić w zależności od dostawcy poczty */ $mail->CharSet = "UTF-8"; /* Ustawienie kodowania wiadomości na UTF-8 */ /* PRAMETRY KONKRETNEGO MAILA: */ $mail->From = '[email protected]'; /* Adres nadawcy maila, bardzo dobra praktyka jest stosowanie adresu za pomoca ktorego logujemy sie do SMTP */ $mail->FromName = 'Przykład'; /* Nazwa nadawcy */ $mail->addAddress('[email protected]', 'Imię odbiorcy1'); /* Dodajemy odbiorcę wiadomości (można dodać kilku) */ $mail->addAddress('[email protected]'); /* Dodanie drugiego odbiorcy, podawanie imienia nie jest obowiazkowe */ $mail->addReplyTo($email, $name); /* Jeżeli chcemy aby odpowiedzi na wysłany mail trafiały na inny adres niż ten z którego zostały wysłane */ /* Dostępne są również funkcje takie jak $mail->addCC czy $mail->addBCC */ $mail->isHTML(true); /* Jeżeli chcemy wysłać wiadomość w formacie HTML */ $mail->Subject = 'Osoba ' . $name . ' kontaktuje się z Tobą za pomocą formularza ze strony.'; $mail->Body = $msg; if(!$mail->send()) { /* Jeżeli podczas wysyłki wystąpi błąd: */ echo 'Wystąpił błąd podczas wysyłania wiadomości! Błąd: ' . $mail->ErrorInfo; } else { /* Jeżeli jest OK */ echo "<fieldset>"; echo "<div id='success_page'>"; echo "<h1>Wiadomość została wysłana pomyślnie.</h1>"; echo "</div>"; echo "</fieldset>"; }
W powyższym kodzie pokazana jest jedynie podstawowa forma użycia PHPMailera, więcej przykładów można znaleźć w ściągniętej bibliotece w katalogu 'examples' lub na stronie projektu.