Docker a PHP mail

6. října 2020

Lang: cs en de es

Používáte Docker a chcete odesílat emaily z PHP pomocí systémové funkce mail() ? V tomto článku popíši jak nakonfigurovat Docker a PHP, aby fungovalo odesílání emailů.

Na Internetu je posílání emailů běžnou věcí. A i webová aplikace (často i jen webová prezentace) potřebuje odesílat emaily. Emaily se ukládají na serverech mail hostingu. Jak ovšem na odesílaní emailů?

Windows

Vývojáři webových aplikací, kteří používají Windows s odesíláním emailů měli vždy problém. Proto vznikly různé nástroje pro odesílání emailů nebo nástroje, které emaily z vývojového prostředí zachytávají.

Unix

Na linuxovém nebo jiném unixu je odesílání emalů standard. Maximálně, aby email nebyl zahozen nebo nespadl do SMAPu, tak je potřeba lokální/testovací stroj nastavil tak, aby emaily přeposílal přes mailserver, který je plně nakonfigurován tak, aby se zajistila vysoká doručitelnost emailů a emaily nepadaly do SPAMu.

Jinou možností je aplikaci nakonfigurovat tak, aby emaily odesílala skrze externí SMTP server. Je to docela dobré a univerzální řešení, ale musíte si pohlídat, že to tak má nastavené každá aplikace a na všech místech. Ovšem i tak některé emaily z nižší úrovně nemusí odcházet typicky informace o pádech aplikace, které často používají systémové odesílaní emailů (i když i toto zasílání emailů by šlo asi přenastavit).

Docker

V současné době se hojně využívá Docker, který je výborný obvoláš pro vývoj aplikací. Ovšem s ním opět řešíte problém odesílání emailů. Protože v Dockeru vám běží jen jeden proces a nic dalšího, tedy ani mailserver. A pokud máte Docker na produkčním prostředí tak funkční odesílaní emailů je nutností.

Obecně se dá říct, že nejlepší je další technologie nepoužívat, pokud k tomu není vyloženě důvod. Tedy pokud do není potřeba, je Docker na produkci jen zbytečná technologie, kterou musíte znát. Každou použitou technologii by jste totiž, měli být schopni spravovat a mít na to čas, jinak si zaděláváte na problémy.

Docker a PHP mail

Jak tedy správně v Dockeru nakonfigurovat odesílání emailů z PHP aplikace?

Jak jsem již zmínil v článku Docker a Cron, v dockeru typicky běží jen jeden proces. Proto v případě běhu webové aplikace (web-serveru s PHP) v Dockeru zjistíte, že v systému neběží mailserver, tedy služba, která je potřeba pro odeslání emailu. Maily tedy musíte z PHP skriptu odesílat pomocí SMTP protokolu přes externí službu. A nebo je možnost Docker image upravit tak, aby jste mohly i nadále používat PHP funkci mail().

Konkrétně řešením je, aby PHP používalo pro odesílání jiný příkaz, který bude emaily odesílat přes externí mail server.
Pro odesílání použijeme systémovou utilitu msmtp. Ve starších verzích linuxových distribucí se používal ssmtp.

Konfigurace pro msmtp je v souboru /etc/msmtprc.

Obsah konfiguračního souboru může vypadat takto:

account default
host smtp.example.com
port 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck on
auth on
user user@domain.com
password "password"
from "user@domain.com"
logfile /var/log/msmtp.log

Ještě je potřeba upravit konfiguraci PHP. Tedy do souboru php.ini doplnint:

[mail function]
sendmail_path = /usr/bin/msmtp -t

Následujícím příkazem po zadaní do konzole běžícího kontejneru můžete vyzkoušet odeslání emailu přes msmtp:

msmtp -d -a default -i -t <<END
From: from@example.com
To: toto@example.com
Subject: test msmtp
test
END

Pokud jste vše nastavili správně, tak vám toto funguje a můžete v PHP použít funkci mail() běžným způsobem.

Důvěryhodnost emailů

Přesto, že maily odesíláte, nemusí příjemcům dorazit do inboxu. Emaily mohou spadnout do SPAMu nebo dokonce mohou být emaily zahozeny. Proto si vždy prověřte přes jaké mailservery poštu odesíláte a jestli mají emaily vysokou důvěryhodnost, teprve pak jste udělali maximum, aby emaily dorazily úspěšně do schránky příjemce.

Budoucnost PHP

Řešíte jestli má budoucnost programovat v PHP pak se koukněte na video má smysl programovat v PHP?:

Články na podobné téma

Změna licencování VMware
Provoz Microsoft SQL serveru na Linuxu
Zálohování: Proxmox backup server
Linux jako router a firewall
Jak náhrát docker image do Docker Registry
Linux: Logical Volume Management
Linuxový softwarový RAID
Provoz webové aplikace za proxy
Migrace mail schránek
Docker multistage build
Zálohování dat zapnutím počítače
Podman
Import Windows do virtualizace Proxmox
Virtualizace Proxmox
Docker a Cron
Lenovo ThinkPad X1 Carbon: zprovoznění LTE modemu EM7544
Yocto Project: Build vlastního operačního sytému pro embedded zařízení
Příprava linuxového serveru pro běh webové aplikace v jazyce Python
Jak řešit špatný výkon sdílených souborů u Dockeru
Jak začít správně používat Docker
Instalace Linuxu na dedikovaný server HPE ProLiant DL320e
Jak provést zátěžový test webové aplikace
Proč používat filesystém JFS
Jak bootovat z 4TB disku s GTP pomocí UEFI
Jak nainstalovat operační systém Mageia Linux bez DVD mechaniky
Souborový systém Btrfs
Raspberry PI
Jak zprovoznit vzdálené přehrávání přes síť na televizi s DLNA
Upgrade Mandriva Linuxu za běhu
Poznámky ke GNU/Linux
WINE - spouštíme programy pro Windous pod Linuxem
Operační systém GNU/Linux

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+