PHP mail()

Cześć.
Posiadam serwer nginx i chciałbym na stronie umieścić formularz kontaktowy. Konfigurowałem PHP.ini tak jak przeczytałem w internecie. Emaile nie dochodzą. Macie jakieś rady?

a serwer poczty zainstalowany? uruchomiony?
Warto oprócz formularza dodać jeszcze zwykły mail. Może się zdarzyć, że serwer się zawiesi i maile nie będą dochodzić.
A po stronie serwera prosty alarmujący skypcik sprawdzający stan serwera.
Sam spotkałem takie przypadki, w niektórych sklepach.

1 polubienie

A nie wystarczy w PHP.ini podać danych? Trzeba mieć serwer?

Dla windowsa musisz specjalnie zainstalować MTA czyli serwer poczty email. Dla Linuxa domyślnie masz zainstalowanego sendmail’a z którego próbuje korzystać PHP. Jednak sendmail jest stary i dziurawy, dlatego się go nie używa praktycznie. To powoduje że na niektórych dystrybucjach sendmail może nie być domyślnie zainstalowany, albo może być wyłączony.

Gdy masz już pewność, że masz MTA - gdybyś go nie miał to dostawałbyś error logi przy wysyłce maila (sprawdź logi), to musisz skonfigurować jeszcze domenę tak by maile nie był odrzucane jako spam.

Minimalna konfiguracja domeny to dodanie rekordu MX oraz SPF. W sumie jeśli nie chcesz odpierać maili teoretycznie możesz darować sobie rekord MX i poprawnie skonfigurować rekord SPF, ale nie gwarantuję Ci że maile będą dochodziły ponieważ jest to kwestia konkretnych filtrów antyspamowych i reguł weryfikacji nadawcy przez serwer pocztowy odbiorcy.
Dodatkowo by obniżyć spam-level naszych maili powinno się wysyłać je przy pomocy smtps (google dość znacząco oznacza adresy których serwery nie używają protokołu szyfrującego), dodać rekordy DMARC i DKIM oraz skonfigurować DKIM na naszym serwerze mailowym.

Niestety nie mogę ustawić tych rekordów, bo nie mam ich w serwisie z domeną. Szkoda. Spróbuję wysyłać e-maile przez inny serwer, który obsługuje mail().

Tak czy siak musisz ustawić spf żeby maile nie były traktowane jako spam lub próba spoofingu.

EDIT:
Jeśli wysyłasz maile z serwera o adresie IP jaki masz przypisany do rekordu MX, maile powinny docierać już chociaż zazwyczaj będą trafiały do spamu (w gmailu na 100%).

SPFa ustawiasz jako typ rekordu w strefie TXT oraz SPF tak by był kompatybilny ze wszystkimi serwerami pocztowymi i filtrami antyspamowymi.

A nie prościej zastąpić sendmail-a przez ssmtp?

Jeśli mnie pamięć nie myli ssmtp wykorzystuje konto na innym serwerze mailowy do wysyłki maili, a to powoduje obowiązek poprawnego skonfigurowania SPFa żeby maile w ogóle były odbierane przez inne serwery pocztowe.

Generalnie to najprościej skonfigurować sobie postfixa albo exima do tego dovecota jako MDA i taki własny serwer wykorzystywać do obsługi poczty dla własnej domeny oraz wysyłki.

Niestety bez względu jak skonfigurujesz i co zainstalujesz musisz mieć poprawnie skonfigurowaną strefę DNS aby maile nie były traktowane jako spoofing albo spam i docierały do odbiorcy.

Było to w nawiązaniu do tego co napisał @Macieson. Szybciej jest podpiąć chociażby konto gmail’a, które już ma poprawnie skonfigurowanego SPF-a i cały szajs zapewniający doręczenie wiadomości niż robić to od zera zwłaszcza jeśli chłopak nie jest biegły w temacie. Wątpię nawet, że potrafi rozróźnić typy rekordów, za co odpowiadają i czym się róźni odpowiedź AA od NA :wink:

Ok, ale jak podepnie się pod konto gmaila to tylko z tego adresu będzie mógł wysyłać maile czyli o ile sam ssmtp nie podmieni adresu nadawcy na ten skonfigurowany to musi zrobić to sam w kodzie. Jeśli już się bawimy w coś takiego to lepiej użyć biblioteki Swift Mailer.

Oczywiście, że lepiej. Czasami się jednak nie da, np. gdy ktoś przejedzie po wszystkim phpEncoderem :wink: