Klienci nie dostawali potwierdzeń zamówień. Sklep wysyłał emaile z lokalnego sendmail który był blokowany przez serwery pocztowe jako spam. 95% emaili trafiało do folderu Spam lub było odrzucanych. Czas naprawy: 2 godziny.
Objawy
- Klienci skarżą się na brak potwierdzenia zamówienia
- Email testowy z Magento admin wysyła się bez błędu ale nie dociera
- W nagłówkach emaili:
X-Spam-Status: Yes - SPF/DKIM nie jest skonfigurowany dla domeny
- W
var/log/system.log: brak błędów, Magento myśli że email wysłał
Diagnoza
# Sprawdź czy email w ogóle wychodzi z serwera mail -s "Test" test@example.com <<< "Test body" # Sprawdź /var/log/mail.log # Sprawdź SPF record domeny dig TXT yourdomain.pl | grep spf # Sprawdź DKIM dig TXT default._domainkey.yourdomain.pl # Przetestuj dostarczalność # mail-tester.com - wyślij email na podany adres i sprawdź score
Rozwiązanie
# 1. Zainstaluj moduł SMTP dla Magento 2 composer require magento/module-smtp # Lub użyj popularnego modułu open source: composer require msp/smtp # 2. Konfiguracja w Admin > Stores > Configuration > Advanced > System > Mail Sending Settings: # Set Return-Path: Yes # Disable Email Communications: No # 3. Konfiguracja SMTP (np. SendGrid, Mailgun, Amazon SES) # Host: smtp.sendgrid.net # Port: 587 # Protocol: STARTTLS # Auth: Login # Username: apikey # Password: SG.xxxxx # 4. Dodaj SPF record do DNS: # v=spf1 include:sendgrid.net ~all # 5. Skonfiguruj DKIM w panelu SendGrid i dodaj do DNS
<?php
// Weryfikacja czy email został wysłany - custom log
class EmailTransportPlugin
{
public function afterSendMessage(
\Magento\Framework\Mail\TransportInterface $subject,
$result
): void {
$this->logger->info('Email sent', [
'to' => $subject->getMessage()->getTo(),
'subject' => $subject->getMessage()->getSubject(),
]);
}
}
Wnioski
Domyślny sendmail PHP nie nadaje się do produkcji. Dedykowany serwis SMTP (SendGrid, Mailgun, Amazon SES) z poprawnym SPF, DKIM i DMARC to standard. Monitoruj dostarczalność emaili przez narzędzia jak mail-tester.com co miesiąc.
