我正在尝试使用PHPMailer发送多封电子邮件(给每个收件人发送不同的电子邮件)
第一次发布,所以非常感谢任何帮助 我很高兴SQL查询能够工作并返回两行 我很高兴现在能留言说你好 我看过很多答案,但没有一个能解决我的问题 此功能将只向两个收件人中的第一个收件人发送邮件,而不向第二个收件人发送邮件。 如果有人能告诉我哪里出了问题,我将非常感激我正在尝试使用PHPMailer发送多封电子邮件(给每个收件人发送不同的电子邮件),php,email,phpmailer,Php,Email,Phpmailer,第一次发布,所以非常感谢任何帮助 我很高兴SQL查询能够工作并返回两行 我很高兴现在能留言说你好 我看过很多答案,但没有一个能解决我的问题 此功能将只向两个收件人中的第一个收件人发送邮件,而不向第二个收件人发送邮件。 如果有人能告诉我哪里出了问题,我将非常感激 public function sendOrderEmail($customer_order_id) { $sql3=" SELECT DISTINCT w.user_id AS supplier_id,
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-再次感谢您!我真的很感谢你的帮助!但我想我一定是刚把你的代码粘贴上去了?在更改我的函数和粘贴我认为是我的最后一个代码之间,我没有看到你的最后一条评论!很抱歉请你转寄好吗?我没有把本地版本弄糟,所以我已经转寄了我的版本