Hetzner ist ein hervorragender und sehr professioneller Hostinganbieter, der super Performance zu fairen Preisen bietet, guten Kundenservice und bisher sehr wenig Probleme bereitet hat.
Ein Thema, das mich bei Drupal Projekten auf Hetzner Servern allerdings immer wieder beschäftigt hat, war der Versand von E-Mails aus Drupal heraus.
Die bulletproof-Methode ist sicherlich der Versand per SMTP, z.B. via Swift Mailer Drupal CMS Modul kombiniert mit dem Mailsystem Modul. oder Symfony Mailer Drupal CMS Modul
Typische Probleme
Aber auch wenn man E-Mails ohne SMTP direkt aus PHP heraus versenden möchte, sind diese Module bei Hetzner Hostings & Managed Webservern zu empfehlen. Denn nutzt man das Drupal CMS built-in Mailsystem, haben die E-Mails den Absender khaccount
Das möchte man in der Regel nicht und wundert sich, woher dieser Absender - trotz korrekt gesetzten FROM-Headern kommt. Offenbar eine Besonderheit bei Hetzner, deren Grund mir weiterhin unklar ist. Abes es gibt Lösungen!
Lösungen
Per Hilfsmodul und hook_mail_alter
Laut Hetzner Support kann der Absender über den 5. Parameter ($parameters
) der mail() Funktion übersteuert werden:
$from = 'from-mail'
$to = 'recipient-email';
$subject = 'subject';
$message = 'body';
$headers = "From: $from";
mail($to, $subject, $message, $headers, "-f$from");
In Drupal würde man dies typischerweise via hook_mail_alter implementieren, beispielsweise in einem kleinen Hilfsmodul:
/**
* Implements hook_mail_alter().
*/
function MYMODULE_mail_alter(array &$message) {
$system_site_mail = \Drupal::config('system.site')->get('mail');
$message['params']['from'] = '-f' . $system_site_mail;
}
Ich habe es selbst noch nicht versucht, aber so oder so ähnlich müsste es funktionieren!
Einfacher per Swift Mailer und Sendmail
Hetzner erfordert zum erfolgreichen Versand die folgende Konfiguration im Swift Mailer-Modul:
/admin/config/swiftmailer/transport
- Transportart:
Sendmail
- MTA-Pfad:
/usr/sbin/sendmail
, Siehe: https://docs.hetzner.com/de/konsoleh/general/faq/paths-of-frequently-us… - Modus:
t
Achtung, dies entspricht nicht den Standard-Einstellungen von Swift Mailer!
Im Anschluss kann der E-Mail Versand im Tab "Test" direkt ausprobiert werden.
Um Sendmail für alle Mails zu verwenden, sollte Swift Mailer als Standard für "Anzeigeformat" und "Absender" gewählt werden (/admin/config/system/mailsystem
).
Einfacher per Symfony Mailer
Wenn ihr das Symfony Mailer Modul nutzt, wird die Standardkonfiguration von Sendmail bei Euch vermutlich zu einer Fehlermeldung führen:
Expected response code "250/251/252" but got code "550", with message "550 relay not permitted".
Daher müsst ihr bei Hetzner (zumindest Managed Server) folgendes eintragen und dann in den Einstellungen von Sendmail Transport im Symfony Mailer auswählen (nicht vergessen!):
// Hetzner Sendmail compatibility:
$settings['mailer_sendmail_commands'] = [
'/usr/sbin/sendmail -t',
];
Hetzner E-Mails bei abgeschaltetem Mailsystem
Auch bei abgeschaltetem Mailsystem können E-Mails vom Webserver versandt werden! Dies wurde mir in einer Supportanfrage bestätigt und in der Tat - es funktioniert!
SPF-Record beachten!
Zum Schluss noch kurz die Erinnerung: Wenn ihr SPF-Records und kein SMTP nutzt, denkt daran, dem Webserver den Versand zu erlauben, z.B. indem Ihr den Eintrag "a
" (für A-Record) in der SPF-Regel ergänzt!