Никогда не удосужился посмотреть точно, как ведет себя mail () до сих пор, просто взломал Wireshark и попробовал пару вещей, и вот результат:
Test1
Сообщение отправлено; До: заголовок появляется раньше От:
mail('person.a@domain.tld','Subject','Body',"From: person.b@domain.tld");
Test2
Сообщение отправлено; Заголовок To: появляется после From:
mail('person.a@domain.tld','Subject','Body',"From: person.b@domain.tld\r\nTo: person.a@domain.tld");
Тест 3
Сообщение не отправлено; PHP пытается это сделать, но не отправляет команду RCPT, просто переходит непосредственно к DATA, что является нарушением протокола, поэтому сервер сообщает PHP об удалении.
mail('','Subject','Body',"From: person.b@domain.tld\r\nTo: person.a@domain.tld");
Тест 4
Сообщение отправлено; оба заголовка To: отображаются в порядке, указанном в $ extra_headers, после From:
mail('person.a@domain.tld','Subject','Body',"From: person.b@domain.tld\r\nTo: person.a@domain.tld\r\nTo: person.c@domain.tld");
Тест 5
Сообщение отправлено; Заголовок To: появляется после From: и имеет значение, указанное в $ Additional_headers
mail('person.a@domain.tld','Subject','Body',"From: person.b@domain.tld\r\nTo: person.c@domain.tld");
Похоже, что заголовок (и) To:, указанный в $ Additional_headers, переопределит один, автоматически сгенерированный PHP, из значения $ to, но вы никогда не получите несколько заголовков To:, если вы явно не установите их в $ additional_headers.
Проверено на PHP 5.2.17 / win32