现在是凌晨1点,我正在努力工作3-4个小时,看看我的剧本有什么问题......
我的数据库有大约400封电子邮件。我将$ChunkSize
设置为循环的计数器,并计算下一个要处理的块。
我已经设置了一些echo()
来调试
echo "This is the " . $GLOBALS["ChunkSize"] . " chunk. <br>";
它应输出当时处理的块。
如果我禁用mail()
,那么我不会获得503服务不可用,但每个echo()
同时显示,而不是按处理顺序显示。
我还发现有些电子邮件到了,但不是每个人都有。此外,如果发送了一些电子邮件,这意味着foreach()
应该已经处理了至少一个块,这意味着它应该至少显示一个echo()
。
我已设置break 1;
,因此每次突破foreach()
时,它都会显示echo()
,其中foreach()
处理的块号由$connection = mysql_connect($hostname, $username, $password);
mysql_select_db($dbname, $connection);
$result = mysql_query("SHOW COLUMNS FROM `Emails`");
while($row = mysql_fetch_array($result)){
$Addresses[] = $row['Field'];}
$Subject = "Test";
$Message = "
Test
";
$Headers = array( EMPTY FOR SECURITY REASONS );
$Headers = implode( "\r\n" , $Headers );
$ChunkAddresses = 50;
$EmailChunkArray = array_chunk($Addresses, $ChunkAddresses);
$ArraySize = count ($EmailChunkArray);
$ChunkSize = 0;
ChunkLoop: {
$EmailChunkArrayLoop = $GLOBALS["EmailChunkArray"];
foreach ($EmailChunkArrayLoop[$GLOBALS["ChunkSize"]] as $ToChunkLoop) {
if ($GLOBALS["ChunkSize"] <= $GLOBALS["ArraySize"]) {
mail($ToChunkLoop,$GLOBALS["Subject"],$GLOBALS["Message"],$GLOBALS["Headers"]);
echo "This is the " . $GLOBALS["ChunkSize"] . " chunk. <br>";
} else if ($GLOBALS["ChunkSize"] == $GLOBALS["ArraySize"]){
exit();}
$GLOBALS["ChunkSize"]++;
break 1;}
}
if ($GLOBALS["ChunkSize"] != $GLOBALS["ArraySize"]){
echo "Test. <br>";
goto ChunkLoop;
} else {
echo "Finished! <br>";}
处理,但事实并非如此。
我做错了什么?
WORKDIR ./myPythonModule
RUN pip install .
答案 0 :(得分:2)
创建只执行一项操作的脚本 - 发送邮件。
sendMail.php
<?php
// Get recipient from the argv array
$recipient = $_SERVER['argv'][1];
// Mail args
$subject = 'HELLOOOOOOO';
$message = 'BLablabla';
$headers = [...]; // optional or not
// Send it
mail($recipient, $subject, $message, $headers);
在您的代码内部:
mail($ToChunkLoop,$GLOBALS["Subject"],$GLOBALS["Message"],$GLOBALS["Headers"]);
替换为:
$recipient = escapeshellarg($ToChunkLoop);
exec("php /path/to/sendMail.php ".$recipient." > /dev/null &"); // that will call mail script and will not wait when execution will end
随意调整我的代码示例
附:此解决方案适用于您不想支付正常批量邮件发送,邮件订阅或专用,vps服务以及只有小型虚拟主机的情况。 (:
P.S ..它不是一个出色的解决方案,但完成了问题作者提供的要求