Tach!
Du meinst, die fehlerhafte From-Zeile ist die Ursache?
Ja, meine ich z.B.. Ein fehlerhafter Empfänger dürfte allerdings auch eine Möglichkeit sein die Funktion fehlschlagen zu lassen.
Ich nehme nicht an, dass der OP so unerfahren ist, dass er die Syntax einer Mailadresse nicht ausreichend korrekt zu notieren vermag. Weiterhin prüft der MTA _nicht_ bereits beim Entgegennehmen der Mail die Auslieferbarkeit. Sonst bräuchte man keinen MTA. Vielmehr nimmt dieser die Mail entgegen und mail() meldet true. Die Aufgabe eines MTA ist, die Mail abzuliefern, und dabei kann er durchaus mehrere Versuche über einen längeren Zeitraum hin unternehmen. Das muss er sogar, wenn der Empfangsserver Graylisting aktiviert hat. In dem Fall prüft lezterer die Ernsthaftigkeit des Zustellversuchs, indem er erst ein- oder zweimal den Empfang verweigert. "Wenn du wirklich willst, probierst du es auch mehrfach." Damit hält man sich zum Beispiel eine ganze Menge dummer Fire-and-forget-Spambots vom Leibe. Auch eine temporäre Fehlfunktion des Emfangsservers bekommt man durch die mehrfachen Zustellversuche mitunter umgangen.
Das heißt nun für das Zusammenspiel von mail() und MTA, dass mail() nicht warten kann, bis der MTA Erfolg hatte. So lange wartet kein Anwender und auch Timeouts schlagen zu, bevor der MTA aufgibt. mail() übergibt an den MTA und kehrt gleich wieder zurück. (Wie im echten Leben, da bleibt man auch nicht neben dem Briefkasten stehen und wartet auf eine Auslieferungsbestätigung.) Folglich heißt das, dass (bei handelsüblichen MTAs) die Nichtauslieferbarkeit einer Mail von mail() nicht mit einem false gemeldet wird. Dieses Szenario ist also sehr unwahrscheinlich die Ursache für das false des OP.
dedlfix.