Skocz do zawartości

Zdjęcie
* * * * * 1 głosy

Wykorzystanie SMTP do wysyłki maili przy 'Prostym formularzu kontaktowym na każdą stronę'

php PHPMailer poradnik formularz

4 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 11 czerwca 2015 - 08:00

#1

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.


  • 0

webDeveloper


writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 11 czerwca 2015 - 13:10

#2

Nie sądziłem, że do tego potrzebny jest komuś poradnik :P

Ale jeśli już, to wiele osób chciałoby, żeby w wysłanych wiadomościach wyświetlały się polskie znaki. Tak więc to chyba powinno załatwić sprawę:

$mail->CharSet = "UTF-8";

  • 1

logo-green-dark.png


unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 11 czerwca 2015 - 13:41

#3

Dzięki, zapomniałem o kodowaniu :) Brak uzupełniłem.


  • 0

webDeveloper


unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 16 lipca 2015 - 10:56

#4

jeszcze jedno, jakby ktoś chciał wysyłać maila na adres podany w formularzu to dobrze jest go zwalidować, do tego można użyć funkcji:

$mail->ValidateAddress($email)

  • 0

webDeveloper


lorgeno
0
Neutralna

Napisano 31 października 2016 - 14:18

#5

Spoko poradnik :)


  • 0





Podone tematy Collapse


Również z jednym lub większą ilością słów kluczowych: php, PHPMailer, poradnik, formularz

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych