SwiftMailer – klasa do wysyłania maili

PHP
URL:
Technologia:

Jeżeli potrzebujemy wysłać maila w PHP można użyć funkcji mail(). Jednak bardzo często chielibyśmy dodać jakiś załącznik albo grafikę która posłuży do stworzenia bardzo ładnego szablonu email. Jeżeli chcemy zwiekszyć możliwości warto użyć rewelacyjnej klasy SwiftMailer.

Klasę ściągamy z oficjalnej strony projektu a następnie doczepiamy do naszego pliku.

# includujemy klase
include "class/swift/swift_required.php";

teraz tworzymy obiekt z wiadomością

# tworzymy wiadomosc
$mailMessage = Swift_Message::newInstance();

ustawiamy temat wiadomości

# temat
$mailMessage->setSubject('Your subject');

definiujemy nadawcę

# od
$mailMessage->setFrom(array('daniel@czestki.net' => 'Daniel Częstki'));

definiujemy odbiorców

# okreslenie odbiorcow
# uzycie:   1) tablica asocjacyjna emial=>nazwa (nazwa nie jest wymagana)
$mailMessage->setTo(array('daniel@czestki.net'));

# okreslenie odbiorcow "do wiadomosci"
# uzycie:   1) tablica asocjacyjna emial=>nazwa (nazwa nie jest wymagana)
$mailMessage->setCc(array('daniel@czestki.net'));

# okreslenie odbiorcow ukrytych
# uzycie:   1) tablica asocjacyjna emial=>nazwa (nazwa nie jest wymagana)
$mailMessage->setBcc(array('daniel@czestki.net'));

a teraz definiujemy główną treść

# wiadomosc
# uzycie:   1) tresc wiadomosci
#           2) text/html lub text/plain - nie jest wymagany
#           3) kodowanie znakow: iso-8859-2, utf-8, itp. - nie jest wymagany
$mailMessage->setBody('Here is the message itself','text/plain');

możemy dodać załączniki

# zalaczniki
$mailMessage->attach(Swift_Attachment::fromPath('hend-logo.gif'));

albo dołączyć do wiadomości grafikę która będzie wyświetlana bez potrzeby zaciągania jej z serwera zewnętrznego

# wstawianie grafiki inline tworzonej dynamicznie
# uzycie:   1) $img_data - zmienna trzymajaca dane obrazka
#           2) nazwa pliku
#           3) mime pliku
# $cid = $mailMessage->embed(Swift_Image::newInstance($img_data, 'image.jpg', 'image/jpeg'));

# wstawianie zawartosci inline
# uzycie cid: <img src="{$cid}" alt="Image" />

$cid = $mailMessage->embed(Swift_Image::fromPath('hend-logo.gif'));

teraz w treści HTML wstawiamy rysunek z identyfikatorem $cid który to jest odnośnikiem do danych z grafiką

# wiadomosc html z zawartoscia inline
# uzycie:   1) wiadomosc
#           2) text/html lub text/plain
#           3) kodowanie znakow: iso-8859-2, utf-8, itp.
$mailMessage->addPart("<q>Here is the message itself</q>
<img src="{$cid}" alt="Image" />", 'text/html');

Czas na ustawienie priorytetu wiadomości

# priorytet wiadomosci
# uzycie:   1) 1-5 (najwyzszy-najnizszy)
$mailMessage->setPriority(3);

oraz kolumny zawijania wierszy

# kolumna zawijania wierszy
# uzycie: max:1000; domyslnie:78
# $mailMessage->setMaxLineLength(1000);

Pozostało jeszcze zdefiniowanie adresu email na który spodziewamy się odpowiedzi na nasz email

# adres email wyslania potwierdzenia otrzymania wiadomosci
# uzycie:   1) adres email na ktory zostanie wyslane potwierdzenie wyswietlenia wiadomosci
# $mailMessage->setReadReceiptTo('your@address.tld');

Czas na wysłanie maila. Aby to zrobić trzeba stworzyć obiekt transportera. Może być mail, smtp albo sendbin.

Na potrzeby tutorialu skorzystamy z serwera SMTP

# tworzymy obiekt transportera wiadomosci email - SMTP
$mailTransport = Swift_SmtpTransport::newInstance('mail.czestki.net', 26)
->setUsername('daniel@czestki.net')
->setPassword('haslo');

Teraz tworzymy obiekt mailera który to wyśle przy uzyciu odpowiedniego transportera naszą wiadomość.

Jako parametr podajemy obiekt transportera.

# tworzymy obiekt mailera
$mailMailer = Swift_Mailer::newInstance($mailTransport);

Czas na wysłanie wiadomości:

# wyslij 1 emial do wszystkich
$mailResult = $mailMailer->send($mailMessage, $aMailFailures);

# wyslij email do kazdego odbiorcy osobno
$mailResult = $mailMailer->batchSend($mailMessage, $aMailFailures);

Można jeszcze sprawdzić czy wystąpiły jakieś błędy z adresami docelowymi.

Niestety funkcja nie zawsze działa.

if (!$mailResult) {
echo "Błedy:";
print_r($aMailFailures);
}

Polecam zapoznać się z dokumentacją klasy.