Funkcja mail() w PHP i zwroty poczty

Autor: Marcin Sochacki, wanted@linux.gda.pl

W PHP-ach programiści często korzystają z funkcji mail() do wysyłania maili. Trzeba jednak zawsze pamiętać nie tylko o tym, gdzie mają ludzie odpowiadać na tak wysłane listy (poprzez ustawienie nagłówka From: i Reply-To:), ale także gdzie mają trafiać ewentualne komunikaty o błędach.

Ten drugi adres wcale nie jest równoważny From:, co umożliwia rozdzielenie rzeczywistych odpowiedzi na listy i komunikatów o błędach. Trafiają one na adres From ustawiony w tzw. kopercie listu (envelope). Czasem ten adres jest też określany mianem "Return-path" i kopiowany do nagłówka w treści listu o takiej właśnie nazwie. Wysyłając coś z funkcji mail() w PHP ten adres jest ustawiany na użytkownika z czyjego konta działa Apache (w Debianie www-data@serwer). Ten adres z kolei jest domyślnie aliasowany na root-a. Tak więc, w efekcie administrator otrzymuje bardzo dużo listów z komunikatami o błędach będących odpowiedzią na listy wysyłane z PHP. Polecaną metodą ustawienia tego adresu jest dodanie piątego parametru w funkcji mail() z "-fadres@email" (bez spacji po -f):

mail('adres@docelowy', 'subject', 'body',
     "From: nadawca@$SERVER_NAME",
     "-fnadawca@$SERVER_NAME");

Aby zadziałała ta opcja, serwer SMTP na serwerze musi być odpowiednio ustawiony, tak aby zezwalał użytkownikowi www-data na zmianę Envelope-From w wychodzących listach (w terminologii serwerów SMTP zwykle jest to opcja trusted users).

Zobacz też: