Thread Mail nichtblockierend (für das Skript) versenden
(26 answers)
Opened by GwenDragon at 2010-02-07 18:12
Ein Mail soll lokal per pipe und sendmail von einem Skript versandt werden.
Wie das geht ist ja bekannt. ;) Ansonsten mal für die Anfänger kurz angerissen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 my $mailfh; if ( open($mailfh, '| /usr/sbin/sendmail -t -oi ') ) { print $mailfh 'From: test@example.org', "\n", 'To: admin@example.org', "\n", 'Subject: ERROR in blah blah', "\n", "\n", 'Error occured in ThisOrThat', "\n", "" . localtime(time), "\n", '.'; close($mailfh) or warn ("Mail not sent by sendmail: $!"); } else { warn ("pipe to sendmail cannot be opened: $!"); } Ja, es gibt Module für den Mailversand. Auch bekannt. ;) Falls im Server ein Fehler auftritt, wird dass durch ein Skript eine Fehlerseite angezeigt und gleichzeitig per sendmail eine Mail an den Admin versandt. Derzeit habe ich das Problem, dass beim Senden per pipe an sendmail das Skript solange anhält, bis das Mail versendet wurde. Ein profiling per nytprof ergab, dass ein Schließn der Pipe, also das close($mailfh) manchmal elend lange dauert. Da kann es passieren, dass nach ½ oder 3 oder 15 Sekunden das Mail erst weggeht. Das liegt wohl am Spamfilter, der leider auch lokale Absender scannt, und was derzeit nicht änderbar ist. Welche Möglichkeit gibt es, für ein CGI-Skript, sozusagen asynchron an sendmail zu senden, sodass das Skript nicht blockiert. Meine Idee war, die Mails erstmal in ein Verzeichnis eigene Warteschlange zu speichern und dann per Cron mit einem externen Skript diese zu an sendmail versenden. Wie könnte ich die Mails noch mit dem Skript versenden ohne Blockierung? Ich bin für Tipps dankbar. /EDIT: Code Last edited: 2010-02-07 18:14:09 +0100 (CET) |