我将使用社交网络软件Elgg,用于需要在需要时向特定群组发送大量电子邮件的组织。电子邮件的数量范围为10-1000,具体取决于组。 Web主机每小时只允许500封电子邮件,因此我需要限制脚本每8秒发送一封电子邮件。
我正在使用PHPmailer和Elgg。 PHPmailer说我应该将这两个脚本(下面的代码)相互结合使用以限制邮件。我知道我将如何使用邮件脚本中的代码,我只是不确定几件事。
1)我真的不明白安全模式的目的
2)在查找set_time_limit之后,看起来我应该将其设置为允许发送所有潜在电子邮件的时间量,无论是10还是1000?或者,如果需要超时,每个循环最多30秒?
3)我应该如何设置它以获得我需要的东西?
指向代码的PHPmailer的链接:
http://phpmailer.worxware.com/index.php?pg=tip_ext
http://phpmailer.worxware.com/index.php?pg=tip_pause
<?php
/* The following code snippet with set the maximum execution time
* of your script to 300 seconds (5 minutes)
* Note: set_time_limit() does not work with safe_mode enabled
*/
$safeMode = ( @ini_get("safe_mode") == 'On' || @ini_get("safe_mode") === 1 ) ? TRUE : FALSE;
if ( $safeMode === FALSE ) {
set_time_limit(300); // Sets maximum execution time to 5 minutes (300 seconds)
// ini_set("max_execution_time", "300"); // this does the same as "set_time_limit(300)"
}
echo "max_execution_time " . ini_get('max_execution_time') . "<br>";
/* if you are using a loop to execute your mailing list (example: from a database),
* put the command in the loop
*/
while (1==1) {
set_time_limit(30); // sets (or resets) maximum execution time to 30 seconds)
// .... put code to process in here
if (1!=1) {
break;
}
}
?>
和
<?php
/* Note: set_time_limit() does not work with safe_mode enabled */
while (1==1) {
set_time_limit(30); // sets (or resets) maximum execution time to 30 seconds)
// .... put code to process in here
usleep(1000000); // sleep for 1 million micro seconds - will not work with Windows servers / PHP4
// sleep(1); // sleep for 1 seconds (use with Windows servers / PHP4
if (1!=1) {
break;
}
}
?>
答案 0 :(得分:1)
从php 5.3开始不推荐使用安全模式,在php 5.4中删除了安全模式,所以如果您的安装相对较新,那么这是一个有争议的问题:http://php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
执行set_time_limit()将重置计数器,因此只要您的代码在比之前设置的限制更短的时间内达到set_time_limit()调用(例如,在29秒内到达,在时钟上留下1秒) ),代码将重置计时器并再获得30秒。但是,由于您不希望代码充满活力,因此您应该完全禁用时间限制。
就个人而言,我不会每8秒发送一封电子邮件。我爆炸了我们允许的500,然后有一个预定的工作,每小时启动一次脚本并从爆炸停止的地方恢复。这将使邮件服务器有点突发,但从长远来看可能更有效,因为它可以将相同收件人域的电子邮件批处理。例如500个组中的所有@ aol.com邮件可以一起使用,而不是强迫服务器多次连接到aol以发送单个邮件。
同样,如果您正在进行这样的批处理,那么在脚本实际运行和构建电子邮件的几秒钟内,服务器故障将只会“糟糕”。其余的时间PHP脚本甚至都不会运行,并且由smtp服务器完成它的工作。
答案 1 :(得分:0)