Probléma: A lehető legegyszerűbb és legbiztonságosabb módon szeretnél levelet küldeni PHP-ból.
Megoldás:
- Telepítsd az msmtp szervert, ami Debian alapú rendszerek esetén a
sudo apt install msmtp
paranccsal megy. - Hozd létre az msmtp konfigurációs állományát. Ez most legyen a
/etc/msmtp
. Tartalma a használandó SMTP szerver(ek) adatai legyen. Példánkban egy Google-nél tartott levelezés példa datait olvashatod.
account gmail tls on tls_certcheck off auth on host smtp.gmail.com port 587 user <felhasználó@domain.tld> from <feladó@domain.tld> password <jelszó>
Ne felejtsük el a biztonsági beállításokat. Bár ajánlatos olyan felhasználóval levelet küldeni, aki nem csinál mást, mint a PHP alkalmazásunk nevében küld levelet, és ha valamilyen baleset folytán kitudódik a jelszava, nem lesz komolyabb kellemetlenség, mégis érdemes ügyelni az olvashatóságra. Esetünkben a PHP-t futtató felhasználó (www-data) fogja hívogatni az msmtp-t, tehát számára és csak és kizárólag számára kell olvashatóvá tennünk az állományt:
sudo chown www-data:www-data /etc/msmtprc sudo chmod -c 400 /etc/msmtprc
- Következő lépésben a
php.ini
állományban rögzítsük és módosítsuk a levelezéshez szükséges adatokat. A következő paramétereket a[mail function]
szekcióban találod.- Kommenteljük ki az összes SMTP beállítást, mert nem klasszikus szerveren keresztül levelezünk (és mert nem Windows alól ;)).
[mail function] ; For Win32 only. ; http://php.net/smtp ; SMTP = localhost ; http://php.net/smtp-port ; smtp_port = 25
- Kicsit lentebb, a sendmail_path változót állítsuk át az msmtp-re
/usr/bin/msmtp
adjuk meg neki a konfigurációs fájl elérési útját-C /etc/msmtprc
, a naplózás helyét/var/log/msmtp.log
, mely tartalmazza az SMTP logokat, azaz itt kezdhetjük a hibakeresést, ha nem mennek ki a leveleink (vagy túl sok megy ki, pl. valamilyen alkalmazás spammel), a konfigurációs fájl account paraméternél megadott fióknevet-a gmail
végül pedig, hogy bármilyen e-mail címre engedje a levél küldést:-t
. Mind együtt:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc --logfile /var/log/msmtp.log -a gmail -t"
- Kicsit lentebb olvasva a PHP konfigurációban még két opciót érdemes aktiválnunk. Az egyik a
mail.add_x_header = On
, mely megmondja, hogy honnan (e.g. milyen PHP alkalmazásból, pl. Drupal) jött a levél. Amail.log = /var/log/php_mail.log
opció pedig PHP szinten naplózza az e-mail küldést. Emberek vagyunk, követünk el hibákat, és a programjaink is lyukasak. Ebből a két kombinációból pedig előbb vagy utóbb előfordulhat nagyobb gond, mint például egy kellemetlen alkalmazás belopakodik a szerverünkre és elkezd leveleket küldeni. Nos, ezen két opció segít megtalálni a kellemetlenkedő (PHP) alkalmazást.
; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = On ; The path to a log file that will log all mail() calls. Log entries include ; the full path of the script, line number, To address and headers. mail.log = /var/log/php_mail.log
- Mentsük el és zárjuk be a
php.ini
állományt.
- Kommenteljük ki az összes SMTP beállítást, mert nem klasszikus szerveren keresztül levelezünk (és mert nem Windows alól ;)).
- Utolsó előtti lépésben hozzuk létre és tegyük a PHP-t futtató felhasználóévá (itt www-data) a fentebb említett két naplóállományt:
sudo touch /var/log/php_mail.log /var/log/msmtp.log sudo chown www-data:www-data /var/log/php_mail.log /var/log/msmtp.log
- Végül, de nem utolsó sorban indítsuk újra a PHP-t futtató alkalmazást, majd teszteljük le a működést. Ha nem kerülnek kiküldésre a leveleid, akkor a fenti naplóállományokban tájékozódhatsz.