2012-03-30 7 views
0

Wir haben derzeit eine funktionierende PHP-Mail-Skript, das funktioniert gut und wie wir es erwartet haben. Aber heute ist uns ein unvorhergesehenes Problem aufgefallen, dass Server nur etwa 15 E-Mails pro Minute per PHP anbieten, um zu verhindern, dass ihre IP-Adresse als Massenmailer auf die Blacklist gesetzt wird.PHP Bestätigung E-Mail, so dass Server E-Mail-Beschränkungen

Wir versuchen nicht, dies zu umgehen. Wir möchten, dass diese Grenze nicht überschritten wird. Also meine Frage ist, welche Methoden kann ich verwenden, um eine Art von Verzögerung basierend darauf, wie viele E-Mails in den letzten 60 Sekunden gesendet wurden.

Bitte beachten Sie, dass db_query() ist eine korrekte, aber spezialisierte Funktion für SQL Ausführung fragt

Hier ist unser Mail-Skript (vereinfacht):

$user_verification_key = md5(rand(1000, 100000000000)); 
db_query("insert into user_t values('" . $user . "', '" . $userinfo['first_name'] . "', '" . $fb_userinfo['last_name'] . "', '" . $userinfo['username'] . "', '" . $_POST['user_country'] . "', '" . $_POST['regions'] . "', '" . $_POST['paypal'] . "', '" .  $user_verification_key . "', 0)"); 
$msg = "Thankyou for signing up:\n\n 
     Click the link to verify your account: http://website.com/verify.php?user=" . $fb_userinfo['id'] . "&verify=" . $user_verification_key . " 
     "; 

mail($_POST['paypal'], 'Account verfication', $msg, 'From: ' . '[email protected]'); 
    header("location: index.php?page=home&msg=Congratulations, your account has been setup please verify your email address");   
+0

Nur als ein Kommentar, schlage ich vor, Sie JangoMail.com's authentifizierte SMTP-Relay, die Ihnen große Zustellbarkeit geben wird, sowie diese Grenzen zu entfernen. – gahooa

Antwort

2

Eine einfache Möglichkeit wäre, alle nicht verarbeitete e speichern -Mails in einer MySQL-Datenbank und verwenden Sie einen Cronjob, um schrittweise in Intervallen durchlaufen (sagen Sie alle 10-15 Minuten). Auf diese Weise verletzen Sie nicht Ihre Hosting-Bedingungen. Wenn Sie cPanel verwenden, ist dies unglaublich einfach, weil Sie einen Cronjob einrichten und mit Ihrem PHP-Skript verknüpfen können. Alles, was Ihr Skript tun müsste, ist eine Verbindung zu Ihrer Datenbank herzustellen, auf alle unverarbeiteten E-Mails (d. H. Solche mit dem Status 0) zuzugreifen und sie zu senden. Wenn Sie sie durchlaufen, ändern Sie ihren Status in 1.

Wenn Sie nicht zu vertraut mit ihnen sind, erfahren Sie mehr über Cronjobs here.

+0

+1, Beat mich bis zum Schlag! Auch APC und andere Shared-Memory-Lösungen. –

+0

Danke Kumpel, das scheint die beste Lösung zu sein. Sehr geschätzt. –

1

Der einfachste Weg, den ich mir vorstellen kann, wäre, alle ausgehenden E-Mails in der Datenbank zu speichern und dann einen Cron zu verwenden, der alle 1 (oder 2 Minuten) läuft und bis zu 15 der wartenden E-Mails versendet.