2009-06-10 14 views
2

Sagen wir, ich habe 1000 abonnierte Benutzer in MySQL-Datenbank. Wenn ich eine E-Mail an alle Benutzer senden möchte, was soll ich tun?Wie schicke ich eine E-Mail an alle Benutzer in PHP?

EDIT:

Was ist (alle sprechen) Cron-Jobs? Kann Beispiel geben?

+0

Cron-Job ist nur eine geplante Aufgabe. (vorausgesetzt, Sie sind auf einem Linux-Rechner). Die meisten Hosts, die ich benutzt habe, haben die Möglichkeit, irgendwo in ihrem Control Panel einen Cron-Job einzurichten. Sie müssen also nur ein PHP-Skript erstellen, das von der Cmd-Zeile ausgeführt wird, und diesen Pfad/Skript als Cron-Job festlegen. – bumperbox

Antwort

5

Ich würde vorschlagen, eine Datenbanktabelle mit allen E-Mails zu erstellen, die gesendet werden müssen. Dies kann ziemlich schnell erfolgen. Von dort aus richten Sie einen Cron-Job ein, der die oberste Zeile übernimmt, per E-Mail versendet und die Zeile löscht. Auf diese Weise können Sie die Arbeit parallelisieren und der Benutzer muss nicht darauf warten, dass die E-Mails gesendet werden, bevor die Antwortseite geladen wird.

0

können Sie beginnen, indem Sie eine Abfrage einstellen jede E-Mail für jeden Benutzer zu bekommen, etwas entlang der Linien von:

SELECT email FROM users; 

Sobald Sie, dass in einer Variable gespeichert haben Sie eine Kombination von foreach() verwenden und mail(), um eine E-Mail an jeden Benutzer zu senden.

1

Am besten schreiben Sie einen Cron-Job in der Sprache Ihrer Wahl, die die Aufgabe ausführt, wenn der Server normalerweise am ruhigsten ist. Wenn Sie PHP verwenden möchten, verwenden Sie immer noch einen Cron-Job. Tun Sie es nicht, während Sie auf eine Seitenanforderung antworten WTF-style.

0

ich würde eine Tabelle mit allen Benutzern und E-Mails und einem Status erstellen. Richten Sie 2 oder 3 Cronjobs ein, um diese Tabelle zu bearbeiten.

In Ihrem PHP-Skript 30 Einträge aus der db (Limit 30) holen und sie mit einer foreach-Schleife verarbeiten. Ändern Sie nach jedem Lauf den Status der "E-Mail" oder löschen Sie den Eintrag aus der db.

Auf diese Weise können Sie sicher sein, dass Ihr Server die Systemlast verarbeiten kann.

2

eine Kombination aus einem for-Schleife verwenden und die E-Mail-Funktion wie:

$rs = mysql_query('SELECT email from emailList LIMIT 0, 10'); 

while(list($email) = mysql_fetch_row($rs)) 
{ 
    // Send Email 
    mail($email, 'Your Subject', 'Your Message'); 
} 

Aber wie jeder sagt alles in einem Rutsch donot laufen. Ich bezweifle ernsthaft, dass ein Server die Last von 1000 E-Mail-Anfragen bewältigen würde. Führen Sie einen Cron-Job aus, der so ausgeführt wird, dass Ihr Code bei jedem Lauf etwa 30 - 50 E-Mails abrufen und diese senden kann.

1

Ich würde vorschlagen zu tun, was alle anderen gesagt haben, erstellen Sie eine separate Datenbanktabelle mit der Nachricht, Betreff und E-Mail-Adresse. Ich würde auch PHPMailer() verwenden, um die E-Mails über SMTP zu senden.

1

Trennen Sie den E-Mail-Sendecode vom Erstellungscode (wie von Stefan May vorgeschlagen). schreibe alle Adressen/Themen/Körper in eine Tabelle und bearbeite die Tabelle später.

Dann führen Sie den Cron-Job nur alle x Minuten aus und senden nur y-Mails. Wenn Sie zu viele E-Mails gleichzeitig versenden, werden Sie möglicherweise schneller als Spammer angezeigt, als Sie denken. Entfernen Sie die Mailing-Aufgabe nur dann aus der Tabelle, wenn das Senden erfolgreich war.

  • dies tun, wenn Sie Bulk-Mail (zB Newsletter)
  • zu senden bekommen dies nicht tun, wenn die E-Mail sofort gesendet (wie Anmeldebestätigung) werden soll - Benutzer
warten hasst

Verwenden Sie eine Bibliothek wie phpmailer oder swiftmailer.

0

Sollte jede E-Mail für jeden Benutzer eindeutig sein? Wenn nicht, senden Sie keine neue E-Mail für jeden Benutzer, fügen Sie eine BCC (Blind carbon copy) zu einer einzelnen E-Mail hinzu. Dies macht Ihren SMTP-Server glücklich.

1

Sie könnten auch versuchen, PHP List zu verwenden.

Installieren Sie PHP-Liste, exportieren Sie Ihre Datenbank von E-Mail-Adressen und importieren Sie sie in PHP-Liste als CSV. Dann müssen Sie sich nicht um die Verwaltung von Benutzern usw. kümmern, und Sie erhalten Klick-Tracking.

0

Schreiben Sie ein PHP-Skript, das die Sende-Mail so behandelt, wie Sie es möchten (die Antwort von Stefan Mai ist eine großartige Möglichkeit, dies zu tun). Entwerfe das Skript so, dass es seine Arbeit protokolliert, und druckt nichts, wenn es ausgeführt wird (dies lässt dich später Fehler finden). Angenommen, Sie verwenden Linux, können Sie cron einrichten, um das Skript zur festgelegten Zeit auszuführen.

Bearbeiten Sie Ihre Cron-Jobs, indem Sie crontab -e in eine Terminalsitzung eingeben. Sie geben dann etwas ein (das wird jeden Abend um Mitternacht ausgeführt).

0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php 
Verwandte Themen