eMail an 2000 Empfänger zeitversetzt senden
Daisy
- php
0 Daisy0 Tom0 Sven Rautenberg0 Daisy
1 hotti0 Meinereiner0 hotti
Hallo zusammen,
ich habe eine MySQL-Datenbank mit ca. 2000 eMail-Adressen.
An diese Adressen sollen Newsletter versendet werden - das Senden ist nicht das Problem, mache ich ganz einfach mit einer While-Schleife und mail().
Wenn ich allerdings alle 2000 eMails auf einmal versende habe ich das Problem, dass diese als Spam eingestuft werden (könnten).
Würde die while-Schleife gerne so anpassen, dass immer nur 20 eMails gesendet werden und dann eine Pause gemacht wird.
Könnt Ihr mir helfen?
Wie lange sollte die Pause sein - ich denke mindestens 20 Sekunden, oder?
So sieht meine while-Schleife aus:
$query = "SELECT email,name FROM `adressen` WHERE newsletter = '1'";
$result = mysql_query($query,$conn);
while ($row = mysql_fetch_array ($result))
{
@mail($row["email"],$sendemail_betreff,$sendemail_text,"From: ".$owner_email);
}
Ganzen lieben Dank,
Eure Daisy
Hallo nochmal,
was haltet Ihr hiervon?
$i=0;
ob_implicit_flush(true);
$buffer = str_repeat(" ", 4096);
while ($row = mysql_fetch_array ($result))
{
$i++;
echo $i.' - ';
echo $row["email"];
echo "<br>";
echo $buffer;
ob_flush();
if ($i % 20 == 0)
{
//20 Sekunden warten
echo '<hr>';
sleep(20);
}
else
{
//1 Sekunde = 1000000
usleep(1000);
}
}
Hello,
spammen ist nicht schön. Aber das willst Du ja bestimmt auch nicht, oder?
Jedenfalls ist deine Lösung äußerst rudimentär.
Eine Datenbankverbindung vom Webserver aus über eine Stunde lang aufrecht zu erhalten, mag zwar funktionieren, aber ich habe arge Zweifel daran.
Du müsstest also mindestens eine vernünftige Fehlerbehandlung einbauen.
Und wenn du die ausgewählten Daten vorher in einer Selection (extra Tabelle) mit einer eigenen fortlaufenden ID ablegst, dann könnstest Du mit
$sql = "select * from email order id limit $offset, 20";
immer genau das Paket von Andressen auslesen, dass gerade an der Reihe ist. Bei Fehler kannst Du so reproduzierbar wieder aufsetzen und weiterspammen :-P
In einer kleinen Parameterdatei kannst Du dir merken, welche Paketnummer/Adressnummer gerade an der Reihe ist.
Das Script kann man auf einem Linux-Host auch in den Hintergrund stellen. Dann muss keine Cleint-Server-Verbindung aufrecht erhalten werden.
Da suchst Du mal im Archiv, wie das geht. Z. B. hier:
http://forum.de.selfhtml.org/archiv/2009/12/t193945/#m1296047
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Moin!
Wenn ich allerdings alle 2000 eMails auf einmal versende habe ich das Problem, dass diese als Spam eingestuft werden (könnten).
Diesen Punkt würde ich doch mal gerne aufgreifen.
Und meine Rückfrage: Bist du dir da sicher? Und von wem würde diese Einstufung erfolgen?
Denn die Frage der Vermeidung solch einer Erkennung ist von essentieller Bedeutung für die Maßnahme.
Nur mal so laut gedacht: Wenn du deinen eigenen Provider so einschätzt, dass dieser bei 2000 schnell hintereinander gesendeten Mails ein Problem hätte - warum sollte er nicht grundsätzlich Hosting-Pakete seiner Kunden wie deins so überwachen, dass eben gerade nicht "mal eben" 2000 Mails gesendet werden, sondern z.B. nur 100 pro Tag? In so einem Fall würde es dir gar nichts helfen, die 2000 Stück auf über eine Stunde zu verteilen und Pausen zu machen, denn du würdest grundsätzlich über dem (sicherlich konfigurierbaren) Limit liegen.
Wenn dein Provider hingegen kein Mail-Limit hat, oder man nach Rückfrage sichergestellt hat, dass das Limit pro "längerer Zeitraum" höher ist als die Anzahl der beabsichtigten Mails, dann dürfte der Provider vermutlich keinerlei Problem haben, die Mails so schnell wie möglich versendet zu kriegen. Dafür sind Mailserver schließlich da (und die Last, die durch Spam verursacht wird, ist sowieso zehnmal größer, als die für reguläre Mails - 90% der Mails sind Spam). Und er ist vermutlich dankbar, dass du keinen langlaufenden PHP-Prozess auf dem Server aufrufst.
Aus netzwerktechnischer Sicht ist auch alles im grünen Bereich: Die Auslastung der Anbindung findet auch statt, wenn jemand mit dem Server via HTTP redet. Und Server senden nun mal mehr Daten, als sie empfangen. Aus dieser Richtung ist nichts zu befürchten.
Und Spamfilter bei Empfängern sind auch nicht wirklich beeindruckt von einer "Menge". Erstens mal sind 2000 Mails sowieso ein Klacks. Zweitens verteilen sich die Mails ja vermutlich auf unterschiedliche Domains, somit kriegt kein System auf einen Schlag 2000 Stück. Diejenigen Massenhoster, bei denen du mehr als einen Empfänger anschreiben musst, sind vermutlich mit 2000 Stück auch nicht überfordert, und ich denke auch nicht, dass das eine relevante Zahl ist, um den Empfang rundheraus abzulehnen - reguläre, erwünschte Newsletter existieren ja, genauso wie Mailinglisten etc. Und die funktionieren alle wie gewünscht, veranstalten aber vermutlich keinen derartigen Aufwand mit absichtlicher Verzögerung.
Es kommt also hinsichtlich des Mailempfangs eher darauf an, welche Reputation dein konkret benutzter sendender Mailserver bzw. dein Hoster insgesamt hat. Wenn der im Ruf steht, nur Spammer zu hosten, kannst du davon ausgehen, dass keine Verzögerung der Welt dir hilft. Wenn der Hoster hingegen nachweislich aktiv gegen spammende Kunden vorgeht und das gesendete Spam-Aufkommen von ihm generell niedrig ist, dürfte die Reputation gut sein - dann ist eine Verzögerung von Mails allerdings ebenfalls nicht notwendig.
Würde die while-Schleife gerne so anpassen, dass immer nur 20 eMails gesendet werden und dann eine Pause gemacht wird.
Was ist, wenn das "erlaubte Limit" bei nur 10 Mails pro Runde liegt? Woher würdest du das erfahren können?
Wie lange sollte die Pause sein - ich denke mindestens 20 Sekunden, oder?
Was ist, wenn die "vorgeschriebene Pause" mindestens eine Stunde pro Mail sein muss? Woher würdest du das erfahren können?
- Sven Rautenberg
Hallo Sven,
danke für Deine Gedanken - wenn das so ist, habe ich es ja einfacher. Habe direkt mal meinen Provider angeschrieben. Ist einer von den kleinen, die flexibel sind ;-)
Liebe Grüsse, Daisy
hi,
An diese Adressen sollen Newsletter versendet werden - das Senden ist nicht das Problem, mache ich ganz einfach mit einer While-Schleife und mail().
Tja, wenn es so einfach wäre ;)
Ne, machs besser so: Nutze einen Dienstleister für den NewsLetter.
Horst
Ne, machs besser so: Nutze einen Dienstleister für den NewsLetter.
Man kann für fast ALLES einen externen Dienstleister verwenden. Aber wie macht der das dann?
Mich würde die Lösung auch interessieren...
hi,
Man kann für fast ALLES einen externen Dienstleister verwenden. Aber wie macht der das dann?
Mich würde die Lösung auch interessieren...
_Die_ Lösung gibt es nicht, weil: Wenn Du selbst was dafür bauen willst, gibt es mehrere Möglichkeiten, die auch davon abhängen, was der Provider erlaubt. Zum Beispiel das Einrichten von ConJobs und die Möglichkeit, Prozesse zu forken.
Hotti