Typo3 Formhandler, SwiftMailer, PowerMail oder direct_mail sendet keine Mails

Merkhilfe und Checkliste falls Formhandler keine Mails versendet. Ich fange tief im Eingemachten an, weil mich das Problem eben bis in das Server-Betriebssystem und die Konfigurationsdateien von Ubuntu getrieben hat. Für Suchmaschinen: Ubuntu -f Parameter, Formhandler Return-Path overwritten by postfix, postfix falschen Absender, postfix ignoriert From-Header in php-Mail-Befehl, From-Header wird von Postfix überschrieben

Erst mal einen kleinen Test machen um zu prüfen, wo das Problem zu suchen ist. Je nach Server-Konfiguration kann es sein, dass eine gültige From-Angabe im Header des mail()-Befehls zwingend ist, oder dass sie per -f-Parameter übergeben werden muss. Folgendes PHP-Script auf den Server spielen und testen, ob Mails grundsätzlich über den php-Befehl mail() versendet werden:

$header = 'From: webmaster@example.com'."\r\n".'Reply-To: webmaster@example.com'."\r\n".'X-Mailer: PHP/' . phpversion();
$ok = mail ( "deine@email.de" , "das ist ein Test" , "Test", $header );

Wenn die Mail ankam: Es muss irgendwas einfaches sein. Dazu schreibe ich später einen Beitrag 😉

Wenn die Mail nicht ankam: Zuerst SPAM-Ordner prüfen! Auch dort nichts? Dann die Zeile mit dem mail() oben durch den 5. undokumentierten -f-Parameter ergänzen:

$ok = mail ( "deine@email.de" , "das ist ein Test" , "Test", $header, "-f deine@email.de" );

Die E-Mail-Adresse muss eine gültige (und dem Server bekannte) E-Mail-Adresse sein. Bei z.B. HostEurope ist das die E-Mail, die unter „Einstellungen -> Skripte -> Standard-E-Mail-Adresse“ zwingend im KIS angegeben sein muss.

Wenn die E-Mail jetzt angekommen ist, dann liegt das an der Server-Einstellung. Dazu habe ich zwei Lösungen gefunden, eine bleibt eher Anwendungsseitig und zwingt Typo3 beim Aufruf von mail() noch den -f-Parameter zu verwenden. Die andere Lösung geht ins Eingemachte und setzt den Parameter zwingend für Apache / PHP und Postfix.

Hilfreich sind übrigens auch immer die Logfiles von Postfix, die man unter var/log/mail.info findet. Wenn dort immer „OK“ steht, aber die Mails trotzdem nicht versendet wurden, ist man mit dem -f-Parameter auf der richtigen Spur.

Lösung 1: Im Formhandler-Setup und der localconf.php

1. In der typo3conf/localconf.php diese Zeile ergänzen:

$TYPO3_CONF_VARS['SYS']['forceReturnPath'] = '1';

2. In der Setup der Formhandler-Konfiguration darauf achten, dass die return_path-Angabe existiert. Als return_path die gleiche Angabe wie beim -f-Parameter verwenden.

finishers {
   2.class = Tx_Formhandler_Finisher_Mail
   2.config {
      admin {
         ...
         return_path = deine@email.de
         ...
      }
      user {
         ...
         return_path = deine@email.de
         ...
      }
   }
}

Lösung 2: Postfix und php.ini

1. Die Postfix-Konfiguration bearbeiten unter etc/postfix/main.cf

myhostname = domainname.de

2. In der etc/php5/apache2/php.ini den Absender für sendmail_path ergänzen:

sendmail_path = /usr/sbin/sendmail -t -i -fwww-data@eswe-verkehr.de

3. Postfix und Apache rebooten per Terminal-Befehl

# sudo /etc/init.d/postfix restart
# sudo /etc/init.d/apache2 restart

Sollte das nicht reichen, hilft evtl. der Abschnitt „Mail“ in diesem speziellen Beitrag:
https://labor.99grad.de/2016/10/03/installation-typo3-unter-ampps/

Ansatz 3: Typo3 4.7 SwiftMailer

Bei manchen Servern hatten wir das Problem, dass der seit Typo3 4.7 implementierte SwiftMailer Ärger machte. Leider fehlt seit 4.7 die Möglichkeit über „substituteOldMailAPI=0“ auf den alten Mail-Befehl umzuschalten.
Folgender Test ist für dieses Problem typisch: Im Install-Tool unter „Grundkonfiguration“ gibt es einen Abschnitt, bei dem man sich eine Testmail schicken lassen kann. Wenn diese Mail nicht ankommt (was wir bei den Virtual Server Paketen von HostEurope mit PowerMail und direct_mail_subscription hatten) liegt es wieder an dem -f Parameter, der in der localconf.php so festgelegt werden muss:

## Für HostEurope V-Server: Problem, das sonst direct_mail_subscription / powermail / Testmail aus dem Install-Tool nicht funktioniert haben 
$TYPO3_CONF_VARS['MAIL']['defaultMailFromAddress'] = 'hier@die-email.de';
$TYPO3_CONF_VARS['MAIL']['defaultMailFromName'] = 'Dein Name';
$TYPO3_CONF_VARS['MAIL']['transport'] = 'sendmail';
$TYPO3_CONF_VARS['MAIL']['transport_sendmail_command'] = '/usr/sbin/sendmail -t -f hier@die-email.de';

Der -f-Parameter unter „transport_sendmail_command“ muss bei HostEurope genau der Einstellung für die „Standard-E-Mail“ unter „Webpaket -> Konfiguration -> Skripte“ im KIS entsprechen.

Ansatz 4 – für Typo3 > 8 · LocalConfiguration.php

Darauf achten, das in der LocalConfiguration.php eine Default E-Mail Adresse angegeben ist:

'MAIL' => [
'transport'=>'mail',
'defaultMailFromAddress'=>'email@domain.de',
'defaultMailFromName'=>'Name Absender',
...
],

Wichtig: Die defaultMailFromAddress muss bei Installationen auf HostEurope genau der Einstellung für die „Standard-E-Mail“ unter „Webpaket -> Konfiguration -> Skripte“ im KIS entsprechen.