W Symfony wiadomość e-mail można wysłać standardowo w PHP, aczkolwiek lepiej wykorzystać w tym celu gotową bibliotekę Swift Mailer z szeregiem udogodnień, które nam oferuje. Oprócz własnego serwera pocztowego można używać poczty popularnych dostawców jak np: Mandrill, SendGrid oraz Amazon SES.

W tym poście ugryziemy tak naprawdę dwa tematy:
1. Budowa formularzy w Symfony 4 na przykładzie formularza kontaktowego.
2. Wysyłanie wiadomości e-mail za pomocą usługi Swift Mailer.

A więc zaczynamy 😉 !
 

INSTALACJA

Aby korzystać z Swift Mailer musimy pobrać i zainstalować pakiet SwiftmailerBundle. W tym celu uruchom w wierszu poleceń komendę:

 

KONFIGURACJA

W pliku swiftmailer.yaml (/config/packages/swiftmailer.yaml) można ustawić różne konfiguracje dla poczty. Dla celów testowych użyjemy tylko podstawowych atrybutów:

  • spool – kolejkowanie wiadomości e-mail; typ memory – czyli z bufora pamięci (domyślnie jest z pliku – file)

Więcej ustawień znajdziesz tutaj.

W pliku .env wprowadzamy zmienną środowiskową MAILER_URL z parametrami naszego konta pocztowego (host, port, username, password etc.):

W tym przykładzie, jak widać używam poczty Gmail. Oczywiście nic nie stoi na przeszkodzie, aby skorzystać z innego konta. Szczegóły znajdziesz w dokumentacji.
 

FORMULARZ KONTAKTOWY

Aby zbudować prosty formularz skorzystamy z najlepszych praktyk Symfony stosowanych w tej dziedzinie 🙂 W tym celu stwórz klasę np: Contact (/src/Entity/Contact.php) i zdefiniuj pola formularza, np: e-mail i wiadomość:

Następnie utwórz plik ContactType.php (/src/Form/ContactType.php). W klasie dodajemy pola (add), które zostaną załączone w kontrolerze i wyrenderowane na stronie, w kolejności podanej w metodzie buildForm. Taki sposób pozwala na wielokrotne wykorzystanie kodu formularza w różnych miejscach i swobodę w jego modyfikacji.

Kontroler ContactController.php (/src/Controller/ContactController.php) jest odpowiedzialny za wyrenderowanie formularza i wysłanie wiadomości po naciśnięciu przycisku submit. Przeanalizuj zawartość poniższego pliku. W poszczególne linie kodu wplotłem komentarze wyjaśniające.

Dodatkowe objaśnienia:

  • Swift_Message(’Formularz kontaktowy’) – w nawiasie podajemy tytuł wiadomości
  • setFrom – od kogo jest wiadomość – pobieramy ze zmiennej globalnej $form->get(’email’)->getData()
  • setTo – adresat wiadomości, np: setTo(’testxyz@gmail.com’)
  • setBody – zawartość wiadomości. W pierwszym parametrze dołączamy szablon wiadomości $this->renderView(’send.html.twig’ (patrz-> poniżej zawartość pliku). W drugim parametrze przekazujemy tablicę zmiennych, które chcemy przekazać w szablonie np: email, content. Jako trzeci parametr podajemy format danych wiadomości e-mail, czyli: text/html.

Zawartość szablonu wiadomości: send.html.twig (/templates/send.html.twig):

Zawartość formularza na stronie: contact.html.twig (/templates/contact.html.twig):

Formularz jest generowany automatycznie $form->createView() na podstawie klas Contact i ContactType. Dla przypomnienia fragment z kontrolera:

Zmienna message wyrzuca komunikaty o błędach, etc.

Wejdź na stronę: //example.com/public/index.php/contact/ i sprawdź działanie formularza.

I to wszystko 🙂
Do następnego! ->