一点背景,
我正在创建一个简单的功能,只要博客管理员创建新公告,它就会向所有用户发送电子邮件。我想使用 sql 查询收集所有电子邮件并将它们全部输入到邮件正文中,或者可能一次循环发送一封电子邮件(尽管这看起来可能需要更长的时间)。
到目前为止,这是我的代码:
public function emailAll()
{
$this->set_mail_settings();
$message = new YiiMailMessage;
$request = Yii::app()->db->createCommand("
SELECT email FROM persons WHERE party_id
")->queryRow();
$message->subject = 'Star Cruises - Login Information';
$message->addTo('sendTo@someone.com');
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message);
exit();
}
private function set_mail_settings()
{
$sysParam = SystemParameters::model()->getSystemParameters(
array("smtp_host", "smtp_port", 'smtp_user','smtp_password')
);
Yii::app()->mail->transportOptions['username'] = $sysParam['smtp_user'];
Yii::app()->mail->transportOptions['password'] = $sysParam['smtp_password'];
Yii::app()->mail->transportOptions['host'] = $sysParam['smtp_host'];
Yii::app()->mail->transportOptions['port'] = $sysParam['smtp_port'];
}
每当使用电子邮件时,都会调用 emailAll() 函数。
我的问题是 $request。我不知道如何收集所有电子邮件并将它们放入 $message->addTo();
更新:在达到这一点之前,我做得很好:
public function emailAll()
{
$this->set_mail_settings();
$message = new YiiMailMessage;
$emails = Yii::app()->db->createCommand("SELECT group_concat(email) as em FROM persons")->queryRow();
$email_ids = explode(",",$emails["em"]);
$message->setBcc($email_ids);
$message->setBody('Sample');
$message->subject = 'New Announcement!';
//$message->addTo('blah@blah.com');
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message);
}
private function set_mail_settings()
{
$sysParam = SystemParameters::model()->getSystemParameters(
array("smtp_host", "smtp_port", 'smtp_user','smtp_password')
);
Yii::app()->mail->transportOptions['username'] = $sysParam['smtp_user'];
Yii::app()->mail->transportOptions['password'] = $sysParam['smtp_password'];
Yii::app()->mail->transportOptions['host'] = $sysParam['smtp_host'];
Yii::app()->mail->transportOptions['port'] = $sysParam['smtp_port'];
}
然后我从 YiiMail.php 的这一行得到一个错误:
189 $msg = 'Sending email to '.implode(', ', array_keys($message->to))."\n".
它声明:array_keys() 期望参数 1 为数组,给定为 null。
我明白它想要什么,但我不明白为什么会出现这个错误?
最佳答案
出于安全原因,您可以使用以下查询获取所有电子邮件 ID,并使用 BCC
而不是 To
。
$emails = Yii::app()->db->createCommand("SELECT group_concat(email) as em FROM persons WHERE party_id = $party_id")->queryRow();
$email_ids = explode(",",$emails["em"]);
$message->setBcc($email_ids); // use bcc to hide email ids from other users
$message->addTo("noreply@yourdomain.com"); //as To is required, set some dummy id or your own id.
关于php - 尝试使用 Yiimail 从数据库中获取电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21157891/