Für ein PHP Projekt wollte ich kürzlich prüfen, welche Mails die Anwendung verschickt. Es ging nur um ein kleines Detail und daher wollte ich keine aufwändige Mailkonfiguration aufbauen, sondern einfach nur den Quellcode der Mails in eine Logdatei schreiben.
Nachdem ich mich zunächst bei sendmail
umgesehen habe, ohne eine passenden Parameter zu finden, der die Mails nur in die Queue packt ohne sie aber zu versenden, bin ich dann in einem Blog auf eine einfache Lösung gestoßen.
Dazu hab ich einfach folgendes Script erstellt und ausführbar gemacht:
#!/usr/bin/php <?php $logfile = '/var/log/phpmail.log'; $log_output = "****" . date('Y-m-d H:i:s') . "****\n"; $handle = fopen('php://stdin', 'r'); $count = 0; while(!feof($handle)) { $count++; $buffer = trim(fgets($handle)); if ($count <= 12) # Output header information $log_output .= $count . ": " . $buffer . "\n"; else # Output body $log_output .= $buffer . "\n"; } file_put_contents($logfile, $log_output, FILE_APPEND); ?>
Damit es beim “Senden” einer Mail ausgeführt wird, reicht eine einfache Anpassung in der php.ini des Apache:
$ sudo vim /etc/php/7.2/apache2/php.ini
; send mail to /var/log/phpmail.log sendmail_path = /path/to/phpmail
Das wars schon. Mehr ist nicht notwendig und ab sofort kann man den Mailinhalt leicht aus der phpmail.log
herauslesen, z.B. mit tail
:
$ tail -f /var/log/phpmail.log
Mein Problem war in 10 Minuten gelöst. Danke Internet! :)