PHP MAILER 向一个收件人发送多封电子邮件

PHP MAILER sending multiple email to one recipient

我知道这听起来像是重复的,但我的问题有点不同 所以我从我的数据库中获取电子邮件使用循环来获取数据问题是即使一次在 addaddress() 函数中传递 1 封电子邮件所有收件人都会根据收件人的数量多次收到相同的电子邮件示例如果我收件人是三个每个收件人将收到三封电子邮件这是我的代码:

for ($i = 0; $i <= (6) - 1; $i++) {
    $q = Yii::app()->db->createcommand("select user_other_email from user_account LIMIT 6")->queryall();
    $ty = '';
    for ($b = 0; $b < count($q); $b++) {
        $ty = $email = $q[$b]['user_other_email'];
        $msg = "Test this!";
        $adminemail = "email@gmail.com";
        $name=' = ?UTF-8?B?' . base64_encode($adminemail) . '?=';
        $subject = 'TEST';
        $headers = "From: $name <{".$adminemail."}>\r\n" . 
            "Reply-To: {$adminemail}\r\n".
            "MIME-Version: 1.0\r\n".
            'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $this->mailsend2($ty,$adminemail,$subject,$msg);
    }
}

这是我的邮件功能:

public function mailsend2($to, $from, $subject, $message) {
    $mail = Yii::app()->Smtpmail;
    $mail->SetFrom($from, 'Test');
    $mail->Subject = $subject;
    $mail->MsgHTML($message);
    $mail->AddAddress($to);
    if (!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }
}

真不知道这有什么问题

您的代码毫无意义,而且您使它变得不必要地复杂。 @RamRaider 的评论非常正确。您还需要做很多不必要的工作来构建您从未使用过的字符串。这是一个更优雅的实现,应该可以按预期工作:

$q = Yii::app()->db->createcommand("select user_other_email from user_account LIMIT 6")->queryall();
foreach ($q as $to) {
    $this->mailsend2(
        $to['user_other_email'],
        'email@gmail.com',
        'TEST',
        'Test this!'
    );
}

这仍然是一种低效的发送方式。查看 the mailing list example provided with PHPMailer 以获得更好的实施。