php - 尝试使用 Yiimail 从数据库中获取电子邮件

标签 php mysql email yii

一点背景,

我正在创建一个简单的功能,只要博客管理员创建新公告,它就会向所有用户发送电子邮件。我想使用 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/

相关文章:

php - MySQL 连接不工作 : 2002 No such file or directory

php - 电子邮件的动态图像,例如倒计时时钟(根据 gmail 图像缓存)

php - Symfony 3.3 + Doctrine/MongoDB : Register custom mapping type

php - 无法使用 phpseclib 在 MySQL 中运行 SQL 查询

c# - 使用 Xamarin 连接到远程 MySQL

mysql - mysql中两个相同表的区别

php - ping 检查真实的电子邮件地址

Ruby Mail gem:连接被拒绝 - connect(2) (Errno::ECONNREFUSED)

php - 更新数据库 SQLSTATE[HY093] : Invalid parameter number: number of bound variables does not match number of tokens

php - 在 codeigniter 中放置全局函数的位置