SMTP dla Drupala — wiadomości z Państwa strony, które docierają
Drupal wysyła pocztę standardowo przez funkcję pocztową PHP na serwerze WWW: bez uwierzytelniania i bez zbudowanej reputacji. Dla Gmaila i Outlooka taka wiadomość ledwie różni się od spamu — aktywacje kont i wiadomości resetujące hasło, które nie docierają, to klasyczna skarga.
Porządnym rozwiązaniem jest moduł SMTP Drupala. Zastępuje on domyślny transport pocztowy połączeniem z zewnętrznym serwerem SMTP, bez konieczności zmieniania czegokolwiek w pozostałych modułach albo formularzach. Pięć poniższych pól to wszystko, czego moduł potrzebuje.
Dlaczego bez relaya coś idzie nie tak
Witryna na Drupalu to często coś więcej niż strona: portal członkowski, intranet, formularz wniosku stowarzyszenia albo urzędu. Właśnie tam poczta jest niezbędna — kto się rejestruje i nie dostaje wiadomości aktywacyjnej, rezygnuje, a nikt Państwu o tym nie powie. Poczta wprawdzie wychodzi, ale po drodze zostaje odrzucona, bo nic nie dowodzi, że pochodzi z Państwa domeny.
Konfiguracja SMTP w Drupal
Pobranie danych
Zaloguj się na swoje konto 2mail i pobierz stamtąd serwer SMTP, nazwę użytkownika oraz hasło.
Wpisanie w Drupal
Prosimy zainstalować i aktywować moduł SMTP Drupala. W ustawieniach tego modułu prosimy włączyć go jako transport pocztowy, wpisać host, port, szyfrowanie, nazwę użytkownika i hasło oraz ustawić adres nadawcy we własnej domenie. Moduł ma wbudowaną wiadomość testową: prosimy wysłać ją na adres zewnętrzny u dużego dostawcy, a nie na adres na własnym serwerze.
Uwierzytelnienie domeny
Zadbaj o poprawne ustawienie SPF, DKIM i DMARC dla swojej domeny, aby odbiorcy mogli zweryfikować, że wiadomość pochodzi od Ciebie.
Test
Wyślij ze swojej platformy wiadomość testową na adres u dużego dostawcy i sprawdź, czy trafia do skrzynki odbiorczej, a nie do spamu.
Pola, o które prosi Drupal
Każda platforma nazywa je nieco inaczej, ale zawsze chodzi o te same pięć. Konkretne wartości są powiązane z kontem i znajdą je Państwo na swoim koncie 2mail — prosimy je stamtąd przepisać, aby mieć pewność, że są właściwe.
| Pole | Co wpisać |
|---|---|
| Serwer SMTP (host) | Nazwa serwera z Państwa konta 2mail. |
| Port | Port odpowiadający wybranemu szyfrowaniu; Państwa konto pokazuje, który to. |
| Szyfrowanie | TLS. Nigdy nie wysyłają Państwo bez szyfrowania — inaczej dane logowania idą przez sieć otwartym tekstem. |
| Nazwa użytkownika | Login SMTP Państwa konta 2mail. |
| Hasło | Odpowiadające mu hasło. Nigdy nie należy używać hasła do skrzynki pracownika. |
Konfiguracja SMTP dla Drupal w kodzie
Działające przykłady dla portu 587 ze STARTTLS, gotowe do skopiowania. Prosimy zastąpić adres nadawcy adresem we własnej domenie oraz sprawdzić nazwę serwera i login na swoim koncie 2mail. Miejsce hasła jest w zmiennej środowiskowej — nigdy w kodzie i nigdy w systemie kontroli wersji.
Instalacja modułu SMTP
Pełna nazwa modułu to SMTP Authentication Support, a instaluje się go przez Composer, jak dziś każdy moduł Drupala. Potem znajdą Państwo jego ustawienia w panelu administracyjnym, w konfiguracji systemu.
composer require drupal/smtp
drush en smtp -y Ustawienia i hasło przez settings.php
Wszystko można wpisać w formularzu modułu, ale wtedy hasło trafia do konfiguracji — a przy eksporcie konfiguracji także do systemu kontroli wersji. Nadpisanie w settings.php wygrywa z zapisaną wartością, pozostaje poza eksportem i pozwala używać innego loginu w każdym środowisku. Samo hasło pochodzi ze zmiennej środowiskowej na serwerze. Jako protokół prosimy wybrać TLS: w tym module oznacza to STARTTLS, które pasuje do portu 587; opcja SSL jest przeznaczona dla portu 465.
// sites/default/settings.php (or settings.local.php per environment)
// Route all Drupal mail through the SMTP module.
$config['system.mail']['interface']['default'] = 'SMTPMailSystem';
$config['smtp.settings']['smtp_on'] = TRUE;
$config['smtp.settings']['smtp_host'] = 'relay.2mail.eu';
$config['smtp.settings']['smtp_port'] = '587';
$config['smtp.settings']['smtp_protocol'] = 'tls'; // "Use TLS" in the form = STARTTLS
$config['smtp.settings']['smtp_username'] = getenv('SMTP_USERNAME');
$config['smtp.settings']['smtp_password'] = getenv('SMTP_PASSWORD');
$config['smtp.settings']['smtp_from'] = 'noreply@example.com';
$config['smtp.settings']['smtp_fromname'] = 'Example'; Kontrola za pomocą Drush
Nadpisań z settings.php nie widać w formularzu: pokazuje on zapisaną wartość. Prosimy więc zapytać Drush, co faktycznie obowiązuje, a następnie wysłać wiadomość testową, którą moduł oferuje na dole swojej strony ustawień. Jeśli się nie powiedzie, prawdziwa przyczyna jest w dzienniku, a nie na ekranie.
drush cache:rebuild
# Which mail system is active, and which host does Drupal really use?
drush config:get system.mail interface.default --include-overridden
drush config:get smtp.settings smtp_host --include-overridden
# What the module logged about failed deliveries (needs the dblog module):
drush watchdog:show --type=smtp Jakie wiadomości wysyła Drupal
Gdy relay jest już skonfigurowany, wszystkie idą przez 2mail — nie trzeba ich konfigurować pojedynczo.
Pułapki przy Drupal
Moduł musi naprawdę być mailerem
Drupal może mieć kilka systemów pocztowych obok siebie. Jeśli moduł SMTP jest zainstalowany, ale nie włączony jako transport pocztowy, wszystko dalej idzie przez funkcję pocztową PHP i nic się nie zmienia. Prosimy sprawdzić to w pierwszej kolejności, gdy wiadomość testowa dociera, a prawdziwa nie.
Nadawca we własnej domenie
Adres e-mail witryny znajduje się w ustawieniach podstawowych i jest używany jako nadawca. Prosimy ustawić go na adres we własnej domenie — tej samej, dla której uregulowane są SPF, DKIM i DMARC. Darmowy adres nie przechodzi DMARC, choćby dane SMTP były idealne.
Eksport konfiguracji i hasła
Jeśli pracują Państwo z zarządzaniem konfiguracją, ustawienia SMTP wędrują razem w eksporcie. Gdy import nadpisze je wartościami ze środowiska testowego, Państwa witryna produkcyjna nagle wysyła z błędnymi danymi. Prosimy trzymać hasło poza eksportem i ustawiać je osobno dla każdego środowiska.
Częste komunikaty o błędach przy Drupal
Komunikaty, które zobaczą Państwo, gdy host, port, szyfrowanie albo login się nie zgadzają — przytoczone dosłownie, aby dało się je rozpoznać w logu, wraz z przyczyną i rozwiązaniem obok.
| Komunikat | Przyczyna | Rozwiązanie |
|---|---|---|
Unable to send email. Contact the site administrator if the problem persists. | To ogólny komunikat samego Drupala, który mówi jedynie, że wysyłka się nie powiodła. Właściwy błąd SMTP znajduje się w dzienniku, pod typem smtp. | Prosimy otworzyć ostatnie wpisy dziennika w panelu administracyjnym albo użyć drush watchdog:show --type=smtp i poszukać tam jednego z poniższych komunikatów. |
SMTP Error: Could not connect to SMTP host. | Serwer nie może połączyć się z relayem albo protokół i port do siebie nie pasują: wybrane SSL na porcie 587, literówka w hoście albo dostawca hostingu blokujący ruch wychodzący na porcie 587. | Prosimy ustawić protokół na TLS, a port na 587. Jeśli nadal się nie udaje, prosimy przetestować z serwera poleceniem openssl s_client -starttls smtp -connect relay.2mail.eu:587 i zwrócić się do dostawcy hostingu o otwarcie portu. |
SMTP Error: Could not authenticate. | Relay odrzuca login: błędna nazwa użytkownika albo błędne hasło, albo zmienna środowiskowa pusta w kontekście serwera WWW, przez co nadpisanie przekazuje puste hasło. | Prosimy sprawdzić, czy getenv('SMTP_PASSWORD') zwraca wartość w kontekście serwera WWW, i użyć loginu SMTP z Państwa konta 2mail — a nie hasła do skrzynki pocztowej. |
SMTP Error: The following recipients failed: … | Login jest poprawny, ale relay odrzuca wiadomość przy podawaniu odbiorcy — w praktyce dlatego, że adres nadawcy znajduje się w domenie, która nie jest powiązana z Państwa kontem 2mail. Często adres e-mail witryny to wciąż adres od dostawcy hostingu albo adres darmowy. | Prosimy ustawić zarówno adres nadawcy w module, jak i adres e-mail witryny w ustawieniach podstawowych na adres w domenie dodanej przez Państwa w 2mail. |
Inna platforma?
SMTP to protokół standardowy: każdy system, który mówi po SMTP — CRM, ERP, własna aplikacja albo serwer — może wysyłać przez 2mail z użyciem tych samych pięciu pól.