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.














