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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
我正在尝试使用PHPMailer发送多封电子邮件(给每个收件人发送不同的电子邮件)_Php_Email_Phpmailer - Fatal编程技术网

我正在尝试使用PHPMailer发送多封电子邮件(给每个收件人发送不同的电子邮件)

我正在尝试使用PHPMailer发送多封电子邮件(给每个收件人发送不同的电子邮件),php,email,phpmailer,Php,Email,Phpmailer,第一次发布,所以非常感谢任何帮助 我很高兴SQL查询能够工作并返回两行 我很高兴现在能留言说你好 我看过很多答案,但没有一个能解决我的问题 此功能将只向两个收件人中的第一个收件人发送邮件,而不向第二个收件人发送邮件。 如果有人能告诉我哪里出了问题,我将非常感激 public function sendOrderEmail($customer_order_id) { $sql3=" SELECT DISTINCT w.user_id AS supplier_id,

第一次发布,所以非常感谢任何帮助

我很高兴SQL查询能够工作并返回两行 我很高兴现在能留言说你好 我看过很多答案,但没有一个能解决我的问题 此功能将只向两个收件人中的第一个收件人发送邮件,而不向第二个收件人发送邮件。 如果有人能告诉我哪里出了问题,我将非常感激

public function sendOrderEmail($customer_order_id)
{ 
$sql3=" SELECT DISTINCT     w.user_id AS supplier_id, 
                            s.trading_name AS supplier_name, 
                            s.contact_email AS supplier_email  
        FROM supplier_info AS s 
        JOIN wine AS w ON w.user_id = s.id
        JOIN order_detail AS o ON o.wine_id = w.id
        WHERE o.order_no_id = :customer_order_id ORDER BY supplier_id DESC;";

$query3 = $this->db->prepare($sql3);
$query3->execute(array(':customer_order_id' => intval($customer_order_id)));

//$result3 = $query3->fetchAll();
while($row3 = $query3->fetch(PDO::FETCH_ASSOC)){
     //  while ($row3 = $query3->fetch()) {

         $supplier_name = $row3['supplier_name'];
         $supplier_email = $row3['supplier_email'];

// foreach($result3 as $key => $output){
    //$supplier_id = $output->supplier_id;
  //  $supplier_email = $output->email; */

    $mail = new PHPMailer;

        if (EMAIL_USE_SMTP) {
                            $mail->IsSMTP();
                            $mail->SMTPDebug = PHPMAILER_DEBUG_MODE;
                            $mail->SMTPAuth = EMAIL_SMTP_AUTH;

                            if (defined('EMAIL_SMTP_ENCRYPTION')) {
                            $mail->SMTPSecure = EMAIL_SMTP_ENCRYPTION;
                            }

                            $mail->Host = EMAIL_SMTP_HOST;
                            $mail->Username = EMAIL_SMTP_USERNAME;
                            $mail->Password = EMAIL_SMTP_PASSWORD;
                            $mail->Port = EMAIL_SMTP_PORT;
        } else {
                            $mail->IsMail();
        }

// Build email body
        $message = "<p>hello</p>";

         // fill mail with data
$mail->isHTML(true); 
$mail->From = "billyjlennon@gmail.com";
$mail->FromName = "Me";
$mail->AddAddress($supplier_email);
$mail->Subject = "Your request ";
$mail->Body = $message;

   // final sending and check
    if($mail->Send()) {
        $_SESSION["feedback_positive"][] = FEEDBACK_CONTACT_MAIL_SENDING_SUCCESSFUL;
        return true;
    } else {
        $_SESSION["feedback_negative"][] = FEEDBACK_CONTACT_MAIL_SENDING_ERROR . $mail-        >ErrorInfo;
        return false;
    } 
} 

首先,您应该首先检查PHPMailer文档,因为有。你不可能一直在努力寻找

在代码中,不要每次循环时都创建一个新的PHPMailer实例-所有保持不变的isSmtp、主机、端口等都应该在循环之前设置一次。在循环内部,您应该执行以下操作:

设置消息正文 设置收件人 发送消息 存储任何错误 清除收件人列表使用clearAllRecipients
在发送检查之后,您还得到了return语句——这些语句将完全退出您的函数,因此它永远不会发送多条消息。您应该在浏览列表时收集错误,并在最后显示或返回它们。

我在addAddress周围使用了while循环,正如上面@synchro所建议的那样。Foreach迭代器语法不起作用,因为我正在使用PHP5.3,正如上面phpMail链接中的注释所示

然后我在while循环外返回,一切正常

这是有效的代码: 对它的任何改进都表示感激

public function sendOrderEmail($customer_order_id)
{
    $sql3 = " SELECT DISTINCT     w.user_id AS supplier_id,
                                s.trading_name AS supplier_name,
                                s.contact_email AS supplier_email
            FROM supplier_info AS s
            JOIN wine AS w ON w.user_id = s.id
            JOIN order_detail AS o ON o.wine_id = w.id
            WHERE o.order_no_id = :customer_order_id ORDER BY supplier_id DESC;";

    $query3 = $this->db->prepare($sql3);
    $query3->execute(array(':customer_order_id' => intval($customer_order_id)));

    $mail = new PHPMailer;

    if (EMAIL_USE_SMTP) {
        $mail->IsSMTP();
        $mail->Host = EMAIL_SMTP_HOST;
        $mail->Username = EMAIL_SMTP_USERNAME;
        $mail->Password = EMAIL_SMTP_PASSWORD;
        $mail->Port = EMAIL_SMTP_PORT;
        $mail->SMTPDebug = PHPMAILER_DEBUG_MODE;
        $mail->SMTPAuth = EMAIL_SMTP_AUTH;
        $mail->SMTPKeepAlive = true;
        if (defined('EMAIL_SMTP_ENCRYPTION')) {
            $mail->SMTPSecure = EMAIL_SMTP_ENCRYPTION;
        }
    } else {
        $mail->IsMail();
    }

    $mail->isHTML(true);
    $mail->From = "billyjlennon@gmail.com";
    $mail->FromName = "Me";

    while ($row3 = $query3->fetch(PDO::FETCH_ASSOC)) {
        // Build email body
        $message = "<p>hello</p>";

        // fill mail with data
        $mail->AddAddress($row3['supplier_email']);
        $mail->Subject = "Your request to " . $row3['supplier_name'];
        $mail->Body = $message;

        // final sending and check
        if ($mail->Send()) {
            //  $_SESSION["feedback_positive"][] = FEEDBACK_CONTACT_MAIL_SENDING_SUCCESSFUL;
            //return true;
        } else {
            $_SESSION["feedback_negative"][] = FEEDBACK_CONTACT_MAIL_SENDING_ERROR . $mail->ErrorInfo;
           // return false;
            break;
        }
        $mail->ClearAddresses();
    }
    return true;
}

先生,我向你致敬!非常感谢你!您在循环中仍然做得太多-在while循环之前创建PHPMailer实例,设置SMTPDebug、SMTPAuth、SMTPSecure、Host、Username、Password和端口isHTML、From、FromName,因为它们对于每条消息都是相同的。设置$mail->SMTPKeepAlive=true也是一个好主意;为了加快发送速度。我已经按照我所描述的方式清理了您的代码。Synchro-再次感谢您!我真的很感谢你的帮助!但我想我一定是刚把你的代码粘贴上去了?在更改我的函数和粘贴我认为是我的最后一个代码之间,我没有看到你的最后一条评论!很抱歉请你转寄好吗?我没有把本地版本弄糟,所以我已经转寄了我的版本