Uložení emailů odeslaných z PHP do souboru

PHP, Linux

Pokud máte na Linuxu LAMP, nebo na Windows XAMPP server, určitě někdy posíláte z PHP emaily. Jak docílit uložení těchto odeslaných emailů do souboru na obou platformách?

Uložení emailů odeslaných z PHP do souboru

Při zavolání funkce mail v PHP se spustí program umístěný nejčastěji v /usr/sbin/sendmail na Ubuntu/Debian. Samozřejmě si sendmail na Linux můžete nainstalovat pomocí

apt-get install sendmail

Pro mě je výhodné, když se mi email uloží do souboru a můžu si ho prohlédnout. Navíc to bezpečně funguje, i když nejsem vůbec na internetu, a taky si tím nezaneřádím schránku.

Windows a XAMPP

XAMPP obsahuje v základní instalaci mailtodisk prográmek, který vám odeslané maily uloží. V php.ini souboru naleznete následující řádky. Po odeslání mailu se spustí program mailtodisk.exe a email bude uložen do souboru v C:\xampp\mailoutput nebo C:\xampp\apache\mailoutput.

; Soubor C:\xampp\php\php.ini
sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"

Linux a vlastní shell skript

Stejně jako na Windows, i na Linuxu je v php.ini stejný řádek, který obsahuje adresu nejčastěji /usr/sbin/sendmail. Zde také umístíme náš skript a dáme mu práva spouštění.

; Soubor /etc/php5/apache2/php.ini
sendmail_path = /usr/sbin/sendmail

Nesmíme také zapomenout vytvořit složku do které se maily budou ukládat a nastavit ji právo zápisu. Poté můžete vyzkoušet odeslat email v PHP pomocí funkce mail.

# Vytvoříme soubor /usr/sbin/sendmail a vložíme do něj skript níže
sudo touch /usr/sbin/sendmail

# nastavíme mu právo spouštění všemi uživateli
sudo chmod 755 /usr/sbin/sendmail

# Vytvoříme složku pro log a nastavíme ji právo zápisu všemi
sudo mkdir /var/log/sendmail
sudo chmod 777 /var/log/sendmail

Do souboru /usr/sbin/sendmail vložíme tento skript

#!/bin/bash

LOG_DIR=/home/pavel/mailLog
LOG_FILE="$/$(date "+%Y-%m-%d %H:%M:%S").log"

PARAMS=""
CONTENT=""

for var in "$@"
do
    PARAMS="$${var} "
done

while read line; do
    CONTENT="$${line}\n"
done < /dev/stdin

echo -e "Parameters:\n$\n\nContent of email:\n$" >> "$LOG_FILE"

Nyní můžeme odeslat email, pokud nalezneme soubor v daném adresáři, udělali jsme vše správně a je hotovo.

mail("pavel.kutac@gmail.com", "test", "test");

Máte lepší řešení, nebo se chcete podělit s tipy? Dejte nám vědět do komentářů

K tomuto článku již není možné přidávat další komentáře