2012-03-30 95 views
0

我们目前有一个可用的PHP邮件脚本,这工作正常,正如我们所料。但是今天我们遇到了一个无法预料的问题,那就是服务器只能通过PHP每分钟提供大约15封电子邮件,以避免将他们的IP地址作为群发邮件列入黑名单。PHP确认电子邮件,允许服务器的电子邮件限制

我们不想绕过这一点。我们想要一种方法来确保不超过此限制。所以我的问题是,根据最近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: ' . '[email protected]'); 
    header("location: index.php?page=home&msg=Congratulations, your account has been setup please verify your email address");   
+0

正如评论,我建议你考虑JangoMail.com的认证SMTP中继,这将给你很好的传递能力,并消除这些限制。 – gahooa 2012-03-30 01:17:57

回答

2

一个简单的方法是将存储所有未处理Ë在MySQL数据库中发送邮件并使用cronjob逐步进行检查(例如每10-15分钟)。这样你就不会违反你的托管条款。

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

如果您不太熟悉它们,请参阅有关cronjobs here的更多信息。

+0

+1,击败我!还有APC和其他共享内存解决方案。 – 2012-03-30 01:18:29

+0

感谢队友,这似乎是最好的解决方案。非常感激。 – 2012-03-30 01:22:49

1

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