一点背景,
我正在创建一个简单的函数,每当博客管理员创建新公告时,该函数就会通过电子邮件向所有用户发送电子邮件。我想使用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('[email protected]');
$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('[email protected]');
$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("[email protected]"); //as To is required, set some dummy id or your own id.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句