PHPMailer如何通过数组ID批量发送电子邮件[duplicate]

yshpjwxd  于 2023-03-16  发布在  PHP
关注(0)|答案(1)|浏览(127)

此问题在此处已有答案

Sending bulk email to an array of users using php mailer function(3个答案)
昨天关门了。
正如标题所示,如何使用PHPMailer批量发送电子邮件?我有一个代码,当用户单击表中的特定按钮时,该用户将通过他们的电子邮件发送电子邮件(通过选择查询)。现在我有了这样的代码,其中当用户选择数据表中的多个数据时,一个查询将运行并更新所有选定项的数据。然后,我现在从我的工作邮件复制代码到循环查询(由于条件而嵌套),不幸的是,电子邮件部分不起作用,但查询起作用了。这似乎有什么问题?

包括

include(dirname(__DIR__).'/db.php');
include(dirname(__DIR__).'/phpmailer/src/Exception.php');
include(dirname(__DIR__).'/phpmailer/src/PHPMailer.php');
include(dirname(__DIR__).'/phpmailer/src/SMTP.php');

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

嵌套代码

else if ($category=="pend")
{
        if ($val==1){
            foreach ($all_id as $value) {
                $query = mysqli_query($db,"SELECT * FROM tbl_person where app_id='$value' and app_status='2';"); 
                while($row= mysqli_fetch_array($query)) {
                    $email = $row["app_email"];
                    $name = $row["app_fname"]." " . $row["app_mname"].". ".$row["app_lname"]; 
                }
                $update = "Update tbl_person set app_status=3 WHERE app_id='$value'";
                $mail = new PHPMailer(true);

                $mail->isSMTP();
                $mail->SMTPAuth = true;

                $mail->Host = 'smtp.office365.com';
                $mail->Port       = 587;
                $mail->SMTPSecure = 'tls';
                $mail->SMTPAuth   = true;
                $mail->Username = 'useremail'; //sample
                $mail->Password = 'emailpassword'; //sample
                $mail->SetFrom('useremail', 'username'); //sample
                $mail->addAddress($email, $name);
                $mail->IsHTML(true);

                $mail->Subject = 'Application Status';
                $mail->Body    = 'Message Body Here';
                $mail->AltBody = 'Message Alt Body Here';
                if (mysqli_query($db,$update)) 
                {
                    header('location:../application.php');
                }
            }
        }
        else if ($val==2){
            foreach ($all_id as $value) {
                $update = "Update tbl_person set app_status=4 WHERE app_id='$value'";
                if (mysqli_query($db,$update)) {
                    header('location:../application.php');
            }
            }
        }
        else{
            echo "Something went wrong";
        }
}

我试过把邮件代码移到if condition for query里面和前面,也试过移走主查询来检查它是否工作,但它没有。我怀疑选择查询不像其他代码那样工作,不幸的是我找不到一种方法来检查这是否是真的。这是我用于我的单键方法的相同代码。当我尝试将其合并到循环中时,电子邮件不再工作

hgb9j2n6

hgb9j2n61#

好的。我能够解决这个问题,只需将电子邮件放入一个数组,然后尝试在邮件中执行foreach。

数组的代码

$email = array();
$query = mysqli_query($db,"SELECT * FROM tbl_person where app_id='$value' and app_status='2';"); 
while($row= mysqli_fetch_array($query)) {
        $email[] = $row["app_email"];
}

邮寄者代码

foreach ($email as $email1) {
$mail->addAddress($email1);
$mail->Subject = 'Test Email';
$mail->Body = 'Hello, this is a test email.';
  
  // Send the email
  if (!$mail->send()) {
    echo 'Error sending email to ' . $email1 . ': ' . $mail->ErrorInfo . '<br>';
  } else {
    echo 'Email sent to ' . $email1 . '<br>';
  }

// Clear all addresses for the next iteration
$mail->ClearAllRecipients();
}

相关问题