Mein Tipp: Statt die mail()-Funktion zu verwenden, solltest du auf eine Mail-Klasse wie z.B. aus dem Zend-Framework zurückgreifen. Ganz klarer Vorteil: Die Mail wird auch dann verschickt, wenn - wie in diesem Fall scheinbar - die Sendmail-Schnittstelle nicht richtig konfiguriert ist oder garnicht erst zur Verfügung steht. Außerdem beinhaltet die Methode über mail() immer das Problem, dass der versendende Rechner die IP des MX-Records aus dem DNS-Protokoll haben sollte, da sonst die Gefahr besteht, dass Mail-Server die eine Abfrage der Sender-IP mit dem MX-Record abgleichen die Mail als Spam markieren könnten. Es ist nämlich nicht immer der Fall, dass beide Sachen auf dem gleichen Server liegen.
Mit einer entsprechenden Klasse kann eien Verbindung zu einem Postfach mittels Benutzername/Kennwort hergestellt werden und über dieses Postfach eine Mail verschickt werden. Ist zwar etwas aufwendiger, da es aber für all das bereits fertige Klassen gibt, hält sich der Mehraufwand in Grenzen. Vorteil ist hierbei, dass die Mail immer vom korrekten Server verschickt wird (als würde mal mit einem konfigurierten Outlook die Mail über den Server schicken) und die oben genannten Nachteile nahezu Geschichte sind.
Eine genaue Anleitung zu entsprechenden Klassen findest du auf den dazugehörigen Doku-Seiten.
Aber eines noch: Je nach Konfiguration kann es sein, dass der Versand von EMails etwas dauert. Ich nutze hierfür eine Schnittstelle mit Datenbank dazwischen: Ich schreibe erst die EMail-Informationen in eine DB und lasse die anstehenden Mails durch einen Cronjob verschicken, der ein mal pro Minute aufgerufen wird. Hier sollte man jedoch sicherstellen, dass der gleiche Cronjob niemals zwei Mal parallel läuft, da es sonst dazu kommen kann - je nachdem, wieviele EMails in der DB stehen - dass EMails mehrfach verschickt werden (weil der eine Cronjob noch dabei ist zu verschicken und der „zweite“ bereits gestartet wurde, zu diesem Zeitpunkt sind die EMails in der Datenbank ja noch nicht als verschickt markiert). Das würde den Nachteil haben, dass der EMail-Server ganz schnell auf internationalen Spam-Listen auftaucht - und ganz nebenbei: Wenn erstmal ein Cronjob neben einem anderen parallel läuft ist es nurnoch eine Frage der Zeit, bis so viele parallele Cronjobs laufen, dass der Server irgendwann den Dienst quittiert. Deshalb bei einer derartigen Realisierung Vorsicht walten lassen.