zum mailversandbenutzte ich bisher immer die FUnktion mail(), stressig dabei ist, dass diese keinen Fehler zurückgibt, auh wenn die mails nicht gesendet werden.
Das würde mich wundern, eigentlich geben SMTP-Dienste immer eine Fehlermeldung aus. Es kann natürlich sein, daß der Fehler per Mail in Dein Postfach wandert, aber irgendwas sollte kommen.
Es ist im übrigen sowieso zu viel verlangt, daß der Mailversand sofort eine Fehlermeldung liefert. Es gibt Server, die sind kurzfristig nicht erreichbar, warum willst Du dan sofort eine Fehlermeldung haben, wenn es Dein Mailserver nach ein paar weiteren Versuchen doch noch schaffen kann, die Mail zuzustellen? Weiterhin können Mails auch mehrere Zwischenstationen nehmen. Einen Fehler am Ende der Kette kann das System am Anfang der Kette nicht vorhersehen.
function socketmail($toArray, $subject, $message, $froma, $fromn)
$connect = fsockopen (ini_get("SMTP"), ini_get("smtp_port"), $errno, $errstr, 30) or die("Could not talk to the sendmail server!");
Dieses Vorhaben ist etwas sinnlos, denn Du machst mit viel Aufwand nur das, was mail() auch macht, baust Dir aber noch haufenweise eigene Fehlerquellen ein.
Unzustellbare Mails wirst Du darüber hinaus auf _diesem_ Wege (Versand an den _eigenen_ Mailserver) auch nicht automatisch erkennen, denn _Dein_ Mailserver akzeptiert die Mail erstmal und versucht erst anschließend, sie an das Ziel weiter zu leiten. Im Ergebnis passiert (mit viel Aufwand) exakt dasselbe, was schon mit mail() passieren sollte: Du bekommst eine Fehlermeldung per Post zugestellt.
Wenn Du also nicht zustellbare Mails erkennen willst, dann mußt Du schon selbst Verbindungen zu den Zielsystemen herstellen. Davon ist aber in einem vom Webserver gesteuerten PHP-Skript dringenst abzuraten, denn (wie bereits gesagt) nicht jeder Server ist erreichbar, wenn Du Deine Mails absetzen willst. Ein echter Mailserver ist hingegen in der Lage, Post auf Halde zu legen und es nochmal zu probieren, mal ganz zu schweigen von einigen anderen Dingen, die den Versand erleichtern. Bitte versuche nicht mit etwas vollkommen Ungeeignetem wie PHP, diese Arbeit selbst zu erledigen.
fputs($connect, "HELO {$_SERVER['SERVER_NAME']}\r\n");
$rcv = fgets($connect, 1024);
while (list($toKey, $toValue) = each($toArray)) {
Ich gehe mal davon aus, daß Du die Fehlerprüfung nur für das Forum weggelassen hast.
Das Problem ist jetztl, dass ich bei jedem Aufruf eine andere Fehlermeldung erhalte.
zB. error 500: da findet er immer irgendwelchen Content nicht (zB die message)
error 221: konnte nicht finden was das heisst
error 225: hab nicht verstanden was das heisst. (irgendwas mit relay)
Es ist nicht unbedingt hilfreich, den erklärenden Text, den der Mailserver hinter dem Fehlercode ausspuckt, abzuschneiden und durch "ich weiß nicht, was das bedeutet" zu ersetzen.
"irgendwas mit relay" dürfte jedenfalls seine Ursache darin haben, daß Dein Mailserver per SMTP ohne Authentifizierung nur Post für sich selbst akzeptiert, aber keine Post für andere Rechner (relay=Relaisstation, Zwischenstation, Verbinder). Das ist ein Schutz gegen Spammer.
Alles in allem solltest Du besser versuchen, die per Post zugestellten Fehlermeldungen an Dein Versandsystem zu geben anstatt den SMTP-Versand von vorne bis hinten selbst zu erledigen.
Gruß,
soenk.e