我在使用phpMailer时遇到了问题,并且在使用if语句时它不会发送到多个地址。如果我对电子邮件进行硬编码,它们工作正常...
附言我还检查了变量和 if 语句,并且都正常工作。
$mail = new PHPMailer;
$mail->setFrom('x@x.com', 'xxx');
$mail->addAddress($row['recipient']);
if ( $row['recipient2'] != '' ) { $mail->addAddress($row['recipient2']); }
if ( $row['recipient3'] != '' ) { $mail->addAddress($row['recipient3']); }
$mail->addAddress('x@x.com');
$mail->addReplyTo('x@x.com', 'xxx');
编辑 - 新示例 - 赏金集:
我尝试了以下脚本,它应该给我 7 个地址,但我只得到一个。(硬编码的)
$mail = new PHPMailer;
$mail->setFrom($from_email);
$mail->addAddress('test@test.com');
if ( $rows != 0 ) {
for ( $i = 0; $i < $rows; $i ++ ) {
$row = clean_fetch_assoc($result);
$mail->addAddress("test2@test.com");
}
}
var_dump($rows);
var_dump($mail->getAllRecipientAddresses());
var_dump($mail->isError());
die();
哪个返回...
int 6
array (size=1)
'test@test.com' => boolean true
boolean false
如您所见$rows
返回 6,因此循环没有任何问题。
有什么想法吗?
没有足够的代码显示来准确和积极地确定您的问题。
但是你的$row
强烈表明你正处于while($row=$stmt->fetch())
之中,对吧?我们在您显示的代码中看不到类似的东西。
我想我有99%的机会在这一点上是正确的。
您的解决方法是在 PHPMailer 部分之前"提取"数据库数据。
获取所有变量(发件人,发件人,发件人名称和一系列地址...还有密件抄送的阵列?).
在进入 PHPMailer 部分之前完成你的 while fetch 循环,该部分不应包含在循环中。
然后,您可以继续构建电子邮件。
设置您的身体、替代主体和主题。
现在是循环到地址数组的时候了。
(不要称它为$row!!!
顺便说一下,你的 for 循环声明并不像你想象的那么正确:
( $i=0;$i<$rows;$i++ )
应该是( $i=0;$i<sizeOf($rows);$i++ )
.
注意到 sizeOf()?
这段代码非常适合我:
我建议你尝试一下,以便承认PHPMailer不是问题。
// This array would be defined by you fetch loop.
$moreToAdressArray=["test1@example.com","test2@example.com","test3@example.com","test4@example.com"];
$endpointMsg->AddAddress( $clientLine['email'] );
for($i=0;$i<sizeOf($moreToAdressArray);$i++){
$endpointMsg->AddAddress( $row[$i] );
}
$endpointMsg->AddBCC ($SENDER);
我有 5 次相同的电子邮件(地址与..@example.com - 哎呀!
PHPMailer就像一个魅力。
愿此代码对您有所帮助,请根据需要进行更改。
$result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false');
foreach ($result as $row) {
$mail->addAddress($row['email'], $row['full_name']);
if (!$mail->send()) {
echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />';
break; //Abandon sending
} else {
echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "@", $row['email']) . ')<br />';
//Mark it as sent in the DB
);
}
// Clear all addresses for next loop
$mail->clearAddresses();
}
首先像这样存储您的多封电子邮件
$this->db->select('ID, email, firstName, lastName');
$this->db->from('contact');
$this->db->where_in("ID",$Id);
$query=$this->db->get();
$res=$query->result_array();
for($i=0; $i<count($res); $i++){
$toArr[$i]['email']=$res[$i]['email'];
$toArr[$i]['name']=$res[$i]['firstName'].' '.$res[$i]['lastName'];
}
$row["email"]=$toArr;
然后添加地址
foreach($row as $v){
$mail->AddAddress($v["email"], $v["name"]);
}
您尝试多次向相同的收件人发送电子邮件,为了避免这种情况,AddAddress内部有条件删除相同的收件人请评论检查添加地址函数中的唯一($address)函数。
你可以在 Class.phpmailer.php 文件中找到这个函数
function AddAddress($address, $name = "") {
/*if(!$this->checkUnique($address)){
return;
}*/
$cur = count($this->to);
$this->to[$cur][0] = trim($address);
$this->to[$cur][1] = $name;
}
/**
* Added function for unique address Aug 29 Nitin
* @param string $address
* */
function checkUnique($address){
$flag= true;
for($i=0;$i<count($this->to);$i++){
if(empty($this->to[$i][0]) || $this->to[$i][0]==$address){
return false;
}
}
for($i=0;$i<count($this->cc);$i++){
if(empty($this->cc[$i][0]) || $this->cc[$i][0]==$address){
return false;
}
}
for($i=0;$i<count($this->bcc);$i++){
if(empty($this->bcc[$i][0]) || $this->bcc[$i][0]==$address){
return false;
}
}
return $flag;
}