PHP确认电子邮件,允许服务器电子邮件限制


PHP confirmation email, allowing for server email limits

我们目前有一个可用的php邮件脚本,它运行良好,正如我们所期望的那样。但今天我们遇到了一个不可预见的问题,服务器通过PHP每分钟只提供大约15封电子邮件,以避免其IP地址被列为群发邮件的黑名单。

我们并没有试图绕过这一点。我们希望有办法确保不超过这一限度。所以我的问题是,我可以用什么方法根据过去60秒内发送的电子邮件数量来设置某种类型的延迟。

请注意,db_query()是一个正确但专门的函数,用于执行SQL查询

这是我们的邮件脚本(简化):

$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: ' . 'no_reply@bartermate.com.au');
    header("location: index.php?page=home&msg=Congratulations, your account has been setup please verify your email address");        

一个简单的方法是将所有未处理的电子邮件存储在MySQL数据库中,并使用cronjob每隔一段时间(比如每10-15分钟)逐步遍历一次。这样你就不会违反你的托管条款。

如果您使用cPanel,这非常容易,因为您可以设置cronjob并将其链接到PHP脚本。您的脚本所要做的就是连接到数据库,访问所有未处理的电子邮件(即状态为0的电子邮件)并发送它们。当您循环浏览它们时,将它们的状态更改为1。

如果你不太熟悉它们,请在这里了解更多关于cronjobs的信息。

我能想到的最简单的方法是将所有传出的电子邮件存储在数据库中,然后使用每1分钟(或2分钟,为了安全起见)运行一次的cron,最多发送15封等待的电子邮件。