Ist das möglich?
Markus
- php
Hallo,
ich versende firmenintern mit einem Script E-Mails an ganze Verteilerlisten. Nach dem Versand werden alle Empfänger aufgelistet an die der Mailversand erfolgreich war. Aber eben erst NACH dem Versand. Ist es möglich das so zu machen, dass die Empfänger zur Laufzeit aufgelistet werden? Wenn die Verteilerlisten so 500 Adressen beinhaltet dauert das eben ein Weilchen und da wäre es gut wenn man zwischendurch die bisher versandten Mails sehen würde, so in dem Stil:
test1@test.de OK
test2@test.de OK
test3@test.de SENDING...
Ich programmiere in C# und ASP.net doch das Prinzip (Sollte es eines geben) wird wohl dasselbe sein?
Gruss Markus
Hallo,
ich versende firmenintern mit einem Script E-Mails an ganze Verteilerlisten. Nach dem Versand werden alle Empfänger aufgelistet an die der Mailversand erfolgreich war. Aber eben erst NACH dem Versand. Ist es möglich das so zu machen, dass die Empfänger zur Laufzeit aufgelistet werden? Wenn die Verteilerlisten so 500 Adressen beinhaltet dauert das eben ein Weilchen und da wäre es gut wenn man zwischendurch die bisher versandten Mails sehen würde, so in dem Stil:
test1@test.de OK
test2@test.de OK
test3@test.de SENDING...
<?php
foreach (file ('adressen.txt') as $line) {
$email = rtrim($line);
echo $email . "SENDING...";
if (mail($email, $subj, $body)) {
echo "\r" . $email . "OK \r\n";
}
else {
echo "\r" . $email . "FAILED \r\n";
}
}
?>
So würde es in etwa mit PHP auf der Kommandozeile funktionieren.
Ich programmiere in C# und ASP.net doch das Prinzip (Sollte es eines geben) wird wohl dasselbe sein?
Keine Ahnung.
Grüße
Andreas
Moin!
else {
echo "\r" . $email . "FAILED \r\n";
}
Failed bedeutet hier aber nur, dass der Befehl mail() die Mail nicht an einen lokalen (oder konfigurierten Remote-) Mailserver übergeben konnte. Da dieses eigentlich immer möglich ist, wird die Fehlermeldung eigentlich nur dann auftreten (dann aber auch für alle Mails), wenn dieser Mailserver nicht erreichbar ist.
- Sven Rautenberg
Moin Sven!
Failed bedeutet hier aber nur, dass der Befehl mail() die Mail nicht an einen lokalen (oder konfigurierten Remote-) Mailserver übergeben konnte. Da dieses eigentlich immer möglich ist, wird die Fehlermeldung eigentlich nur dann auftreten (dann aber auch für alle Mails), wenn dieser Mailserver nicht erreichbar ist.
das ist natürlich richtig, ich würde mich bei "Massenmails" auch nicht auf die mail-Funktion verlassen wollen, sondern per SMTP direkt mit dem MTA kommunizieren.
Grüße
Andreas
Moin!
Wenn die Verteilerlisten so 500 Adressen beinhaltet dauert das eben ein Weilchen und da wäre es gut wenn man zwischendurch die bisher versandten Mails sehen würde, so in dem Stil:
test1@test.de OK
test2@test.de OK
test3@test.de SENDING...
Das Senden einer einzelnen Mail geht ratzfatz, da willst du mit Sicherheit keine komplexe "Statusanimation" haben, sondern einfach nur das "OK".
Aber was bringt dir das Auflisten von 500 oder mehr Mailadressen untereinander, jeweils mit "OK"? Eigentlich willst du wissen, wie weit der Vorgang schon ist. Also eher ein "234 von 567 Mails gesendet".
Und dann kommt noch dazu, dass dein Mailskript höchstwahrscheinlich die Mails nur an den lokalen Mailserver übergibt - die Auslieferung an den Empfänger aber garnicht geprüft wird, sondern am Ende durch die Rückläufer in der Mailbox ablesbar ist. Das Ausliefern der Mail durch den Mailserver geht zwar auch sehr fix, insbesondere, weil der mehrere Mails parallel ausliefert, aber es dauert eben auch und hängt auch stark von der Bandbreite der ausgehenden Leitung ab.
Du kannst natürlich auch die "Deluxe"-Version bauen und die Mails per SMTP direkt an den Empfänger-Mailserver ausliefern. Dann hast du die direkte Kontrolle über den Vorgang, erfährst im Skript auch, wenn es Probleme gibt - und hast den Nachteil, dass du alle Mails nacheinander ausliefern mußt und nicht parallel arbeiten kannst, was die Sache erheblich verzögern dürfte.
Aber um deine Frage zu beantworten: Ja, alles ist möglich.
Hallo
Aber was bringt dir das Auflisten von 500 oder mehr Mailadressen untereinander, jeweils mit "OK"? Eigentlich willst du wissen, wie weit der Vorgang schon ist. Also eher ein "234 von 567 Mails gesendet".
Genau das möchte ich. Aber wie macht man das? Wenn die Seite doch einmal beim Benuter ist, dann kann ich sie ja nicht mehr nachträglich ändern, sondern nur wenn der User die Seite aktualisiert...?
Gruss Markus
Moin!
Genau das möchte ich. Aber wie macht man das? Wenn die Seite doch einmal beim Benuter ist, dann kann ich sie ja nicht mehr nachträglich ändern, sondern nur wenn der User die Seite aktualisiert...?
Oh, ähm... ich war einen Moment verwirrt. Bei mir läuft so ein Massenversandskript auf der Kommandozeile des Servers, da kann ich logischerweise mittendrin einfach Ausgaben machen, die sofort angezeigt werden. Im HTTP-Kontext kannst du zwar genauso vorgehen, und zwischendurch auch mal flush() aufrufen (das schiebt den bis dahin angefallenen Ausgabepuffer zum Empfänger), aber 100% vorhersagbar laufen wird es damit nicht, weil dir Proxys einen Strich durch die Rechnung machen können.
Die Alternative für eine Browseranwendung ist, zwei Prozesse laufen zu haben. Der eine sendet die Mails raus und vermerkt irgendwo, wie weit er schon ist. Der zweite Prozess ist eine HTML-Seite mit Meta-Refresh, die sich regelmäßig selbst aufruft und ausgibt, was der erste Prozess als Fortschritt gespeichert hat. Wenn der Mailsendeprozess beispielsweise jede erfolgreich oder fehlerhaft versendete Mail in einer Datenbank vermerkt, kann man genau diese Spalte ja abfragen und zählen lassen, wieviele unerledigte Mails noch anstehen.
- Sven Rautenberg