Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Foreach为每个循环发送电子邮件_Php_Arrays_Loops_Foreach_Phpmailer - Fatal编程技术网

Php Foreach为每个循环发送电子邮件

Php Foreach为每个循环发送电子邮件,php,arrays,loops,foreach,phpmailer,Php,Arrays,Loops,Foreach,Phpmailer,我有一个PHP foreach循环,它通过电子邮件提示运行并发送电子邮件。 我的问题是,它会为提示中的每一行向提示中的每一封邮件发送一封电子邮件,因此假设提示中有50封邮件,我将收到50封电子邮件。不酷 原因是: $cue = new NewsletterHandler; $cue->GetEmailCue($letter_id, $lhash); require_once(INCLUDE_DIR."/class.phpmailer.php"); $mail = new P

我有一个PHP foreach循环,它通过电子邮件提示运行并发送电子邮件。 我的问题是,它会为提示中的每一行向提示中的每一封邮件发送一封电子邮件,因此假设提示中有50封邮件,我将收到50封电子邮件。不酷

原因是:

$cue = new NewsletterHandler;       
$cue->GetEmailCue($letter_id, $lhash);

require_once(INCLUDE_DIR."/class.phpmailer.php");
$mail = new PHPMailer();
$mail->From     = "tegl@xxxxxxx";
$mail->FromName = "Randers Tegl";
$mail->Host     = "smtp.xxxxx.dk";
$mail->Mailer   = "smtp";

foreach($cue->email_row as $key => $value) { 
   $mail->AddAddress($value);
   $mail->Subject = $subject ." - ". date("d-m-Y");
   $mail->Body    = $this->htmlTemplate;    

   if(!$mail->Send()) {
      echo "E-mailen er ikke sendt til ". $value;
      echo "Mailer Error: ". $mail->ErrorInfo;
      echo "<br />";
      mail("morten@domain.dk", "Error", "Letter not send. ". $mail->ErrorInfo ."");
   } else {
      $sql_update = "UPDATE newsletter_emailcue SET time_recieved = NOW() WHERE email = '". $value ."'";
      SQLHandling::SQLquery($sql_update);    
      echo "Newsletter send to ". $value ."<br />"; 
   }
}
几件事:

  • 您可能会以密件抄送方式(盲拷贝)发送一封邮件,这样就不会有一位收件人收到所有其他邮件列表
  • 您可以在循环之外操作sql update(使用、分离的多次更新),构建一个大的sql查询字符串,然后在循环之后逐个执行,这样您就可以保存一些大量的sql访问(尝试10000次不同的更新,或者一次更新10000条记录)
  • 您可能总是将查询中使用的变量(即:$letter_id)从范围之外转义给SQL(因此您永远不知道是否安全),否则您将容易受到SQL注入的攻击
  • 那么关于您的var_转储:暂时看不到,在代码中var_转储放在哪里

    • 我找到了!我忘了放

      $mail->ClearAddresses();
      $mail->ClearAttachments();
      

      在脚本的末尾,它在运行
      $mail->AddAddress($value)时插入了每一封邮件

      这对你的问题没有什么帮助,但“等待队列”的发音是
      queue
      ,而不是
      cue
      。你似乎想开始收到比现在更多的垃圾邮件,因为你非常高兴地显示你的电子邮件地址……@loler我删除了一些看起来有效的垃圾邮件。
      array(2) { [0]=> string(17) "morten@adomain1.dk" [1]=> string(14) "morten@domain2.dk" } 
      array(2) { [0]=> string(17) "morten@domain1.dk" [1]=> string(14) "morten@domain2.dk" }
      
      $mail->ClearAddresses();
      $mail->ClearAttachments();