Zitat:
Zitat von Mario Sedlak
Ich will mit PHP eine Mail verschicken. Wenn der Versand nicht in 10 Sekunden erfolgreich durchgeführt wurde, soll eine von mir definierte Fehlermeldung ausgegeben werden. Erstaunlicherweise habe ich für dieses Problem nirgendwo eine Lösung gefunden.
|
Da gibts auch keine.
Alle Mails, die nicht über den zum Absender gehörigen SMTP Server verschickt werden, werden als SPAM betrachtet. Fast alle SMTP Server - zumindest die, die keine "open relays" sind - erwarten, daß sich der Mailabsender via SMTP-auth oder smtp-after-pop authentifiziert.
Zitat:
Ich benutze einen Webspace mit Safemode=Off. Ich habe keinen Vollzugriff auf den Server und kann nicht beeinflussen, ob die PHP-Funktion mail() terminiert oder aufgrund irgendwelcher Störungen aufseiten meines Anbieters nie beendet wird.
|
mail() - diese Funktion ist zum Versand korrekter Emails absolut ungeeignet. Nutze dafür entweder phpmailer oder swift mailer.
Auf meinem Server habe ich die Funktion mail() gesperrt. Postfix erwartet bei mir SMTP Auth auch von lokalen Scripten. Warum? Ganz einfach: ich hatte mal Pech gehabt, weil der Horde Webmailer zum SPAM Versand genutzt wurde und die Server IP nach 24 Std. gelistet war.
Zitat:
Folgende Möglichkeiten habe bereits erfolglos probiert:
1) Exception-Handling mit try und catch
|
Das ist bei mail() Unfug. Der Rückgabewert von mail() sagt nur das aus:
Zitat:
Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.
It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.
|
Zitat:
2) set_time_limit(10);
3) ini_set('max_execution_time', 10);
|
Das klappt so nicht. Wenn apache2handler und max_execution_time per admin_php_value gesetzt wurde, wird ini_set u/o set_time_limit() ohne Fehlermeldung nicht ausgeführt. Bei fastCGI und einer zentralen php.ini ist das genauso. Es muß zumindest ausgeschlossen werden, daß irgend ein Untermieter die Zeitgrenze auf unendlich setzen kann.
Zitat:
4) mail($empfaenger, $betreff, $text, $kopf, '-O Timeout.aconnect=9s');
|
Nett gedacht:
Code:
This feature is available in Postfix 2.3 and later.
-O option=value (ignored)
Dein Option wird also ignoriert.
Zitat:
Kann man PHP nicht beibringen, dass es einer Funktion maximal 10 Sekunden zur Ausführung geben soll?
|
Programmiere lieber so, daß Dein Script innerhalb von max. 50ms fertig ist.
Zitat:
Ich finde es unprofessionell, einem Benutzer eine "hängende" Webseite zuzumuten.
|
Ich auch.
Nutze phpmailer. Dann muß Dein Script nicht warten, bis sendmail fertig oder ob das Postamt des Empfängers gerade geschlossen ist. Die Mailerklasse liefert Deine Email beim Absender SMTP ab, der dann versucht, innerhalb von 7 Tagen die Email beim Empfänger SMTP abzugeben. Falls das nicht klappt ("Empfänger unbekannt verzogen", "Briefkasten voll", "Pause, weil das Personal streikt", "Postamt gibts nicht"), gehts zurück an den Absender.