我遇到了phpMailer的问题,并且在使用if语句时它没有发送到多个地址。如果我对电子邮件进行硬编码,他们就可以正常工作......
P.S。我还检查了变量和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,因此循环没有任何问题。
有什么想法吗?
答案 0 :(得分:1)
没有显示的代码可以准确地确定您的问题。
但是你的$row
强烈暗示你正处于while($row=$stmt->fetch())
的中间,对吧?
我们在您显示的代码中看不到任何类似内容。
我认为我有99%的机会对此表示正确
您的修复是“提取”您的数据库数据之前 PHPMailer部分
获取所有变量(发件人,发件人,发件人名称和一系列地址......还有一系列BCC?)。
完成你的while fetch循环之前进入PHPMailer部分,该部分不应包含在循环中。
然后,您可以继续进行电子邮件构建
设置你的身体,AltBody和主题
现在是循环到地址数组的时间
(不要称之为$ 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 - Doh!)。
PHPMailer就像一个魅力。
答案 1 :(得分:0)
这段代码可以帮助你,可以根据需要改变它。
$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();
}
答案 2 :(得分:-1)
首先存储您的多封电子邮件
$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"]);
}
答案 3 :(得分:-1)
您尝试向同一个收件人发送电子邮件多次,为避免这种情况,AddAddress中有条件删除相同的收件人 请在AddAddress函数中注释checkUnique($ 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;
}