Phpmailer

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania


Co to jest?

Phpmailer jest to klasa mająca na celu wysyłanie z zewnętrznego serwera SMTP poczty do wielu użytkowników z możliwościć dołączanie załączników.

Jak zacząć

Phpmailer jest bardzo prosty w obsłudze do wysyłania wiadomości z tej klasy należy pierw pobrać ją z oficjalnej strony. następnie należy ją rozpakować w miejscu z którego będziemy korzystać ze skryptu wysyłającego wiadomości.

Prosty kod

Kod do wysyłania wiadomości jest bardzo prosty najpierw należy utworzyć plik z którego będziemy wysyłać wiadomości, następnie dodać naszć klasą poleceniem require nasz kod powinien na razie wyglądać tak:

<?php
require(phpmailer/class.phpmailer.php);
?>

Teraz musimy stworzyć nową klasą phpmailer do tego użyjemy prostego polecenia, które należy dopisać do naszego istniejącego kodu

$mail = new PHPMailer();

Skoro mamy już istniejącć klasą phpmailer możemy zabrać się do logowania do serwera, przy czym należy pamiętać, że ta klasa nie działał z serwerem gmail. Aby się zalogować należy napisać taki kod:

$mail->PluginDir = "phpmailer/";
$mail->From = "login@serwer.pl";
$mail->FromName = "moje Imię i nazwisko albo nick";
$mail->Host = "smtp.wp.pl";
$mail->Mailer = "smtp";
$mail->Username = "login";
$mail->Password = "Hasło do poczty";
$mail->SMTPAuth = true;
$mail->Port = 25;
$mail->SetLanguage("pl", "phpmailer/language/");

Przeanalizujmy teraz każdć linijkę kodu:

$mail->PluginDir = "phpmailer/";   //informuje nas że używamy klasą phpmailer
$mail->From = "login@serwer.pl";   //podajemy z jakiego maila ma wysłać wiadomość
$mail->FromName = "moje Imię i nazwisko albo nick";   //podajemy od kogo jest ta wiadomość, możemy podać Imię nazwisko albo naszego nicka
$mail->Host = "smtp.wp.pl";   //serwer SMTP z którego będziemy wysyłać wiadomość
$mail->Mailer = "smtp";   //informujemy go że będziemy korzystać z serwera SMTP
$mail->Username = "login";   //tutaj podajemy login do zalogowanie się do serwera
$mail->Password = "Hasło do poczty";   //Hasło jakim się posśugujemy aby zalogować się na pocztą
$mail->SMTPAuth = true;   //czy jest potrzebna autoryzacja do serwera SMTP
$mail->Port = 25;   //Port używany do komunikacji z serwerem SMTP
$mail->SetLanguage("pl", "phpmailer/language/");   //język w jakim będą się wyświetlać błędy jeśli takie zaistnieją

Skoro już się zalogowaliśmy na serwer należy teraz nadać tytuł temu mailowi i treść robi się to z bardzo prosty sposób:

$mail->Subject = "tytuł maila";
$mail->Body = 'Treść maila w której można używać zmiennych jak i kodu HTML';

Wiemy już jak zalogować się na serwer SMTP i nadać treść wiadomości, ale przecież należy jeszcze zdefiniować do kogo wysyłamy maila, a to wykonuje się w następujący sposób:

$mail->AddAddress("dokogowysylamy@serwer.pl","imie i nazwisko bądź nick osoby do której wysyłamy");

Możemy też dodać kolejną osobć do której wysyłamy wiadomość tą samą instrukcję. Skoro mamy już napisanego maila możemy go wysłać. Najlepiej to zrobić w taki sposób, aby skrypt zasygnalizowaś nam czy udało się wysłać, a jeśli nie to jaka jest przyczyna. Zrobimy to prostą instrukcję warunkową:

if($mail->Send())
    {
    echo 'E-mail został wysłany';
    }
else
    {
    echo 'E-mail nie mżgś zostać wysłany, przyczyna :'. $mail->ErrorInfo;
    }

dzięki temu kodowi skrypt napisze nam czy udało się wysłać wiadomość czy nie. Na koniec możemy jeszcze wyczyścić adresy i treść maila:

$mail->ClearAddresses();
$mail->ClearAttachments();

To by było na tyle jeszcze tylko skleje cały skrypt w całość

<?php
require(phpmailer/class.phpmailer.php);
$mail = new PHPMailer();
$mail->PluginDir = "phpmailer/";
$mail->From = "login@serwer.pl";
$mail->FromName = "moje Imię i nazwisko albo nick";
$mail->Host = "smtp.wp.pl";
$mail->Mailer = "smtp";
$mail->Username = "login";
$mail->Password = "Hasło do poczty";
$mail->SMTPAuth = true;
$mail->Port = 25;
$mail->SetLanguage("pl", "phpmailer/language/");
$mail->Subject = "tytuł maila";
$mail->Body = 'Treść maila w której można używać zmiennych jak i kodu HTML';
$mail->AddAddress("dokogowysylamy@serwer.pl","imie i nazwisko bądź nick osoby do której wysyłamy");
if($mail->Send())
    {
    echo 'E-mail został wysłany';
    }
else
    {
    echo 'E-mail nie mógł zostać wysłany, przyczyna :'. $mail->ErrorInfo;
    }
$mail->ClearAddresses();
$mail->ClearAttachments();
?>

więcej informacji na temat phpmailer na stronie PHPmailer.

AddAttachment

Przykład użycia addattachment:

$mail->AddAttachment("./plik.zip", "nowa_nazwa.zip"); 

Gdzie "./plik.zip" to ścieżka do pliku, który chcemy wysłać a "nowa_nazwa.zip" to nowa nazwa pliku

Oczywiście wklejamy to przed funkcje Send().

Wysyłanie z serwera SMTP do kilku odbiorców pobranych z bazy MySQL

Przykład użycia z autoryzacją:

error_reporting(E_STRICT); //proste komunikaty lub bardzo rozbudowane: error_reporting(E_ALL);
require_once('../class.phpmailer.php');
$mail                = new PHPMailer();
$body                = file_get_contents('contents.html');
$body                = eregi_replace("[\]",'',$body);
$mail->IsSMTP(); 
$mail->Host          = "smtp1.serwer.pl;smtp2.serwer.pl";
$mail->SMTPAuth      = true;
$mail->SMTPKeepAlive = true;                  // Podtrzymywanie połączenia SMTP aż do wysłania wszystkich maili
$mail->Host          = "mail.strona.com";
$mail->Port          = 25;                    // 26 dla serwera GMAIL
$mail->Username      = "Login";
$mail->Password      = "Hasło do poczty";
$mail->SetFrom('list@domena.pl', 'mailing');
$mail->AddReplyTo('list@domena.pl', 'mailing');

$mail->Subject       = "Test wysyłania maaili pobranych z bazy danych przez SMTP";

@MYSQL_CONNECT("localhost","root","password");
@mysql_select_db("baza");
$query  = "SELECT imie, email, photo FROM lista";
$result = @MYSQL_QUERY($query);

while ($row = mysql_fetch_array ($result)) {
  $mail->AltBody    = "Otwórz tą wiadomość aplikacją obsługującą wiadomości HTML";
  $mail->MsgHTML($body);
  $mail->AddAddress($row["email"], $row["imie"]);
  $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");

  if(!$mail->Send()) {
    echo "Błąd (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />';
  } else {
    echo "Wiadomość wysłana do: " . $row["imie"] . ' (' . str_replace("@", "@", $row["email"]) . ')<br />';
  }
  // Czyszczenie adresu i załączników do kolejnego kroku pętli
  $mail->ClearAddresses();
  $mail->ClearAttachments();
}

Przydatne linki

http://www.tig12.net/downloads/apidocs/wp/wp-includes/PHPMailer.class.html - opis wszystkich funkcji klasy PHPMailer.