Yii2 - 邮件程序 - 将消息发送到数据库中的电子邮件行

Yii2 - mailer - send message to email rows in database

您好,

我需要向多个收件人发送电子邮件,这些收件人存储在 table 命名邮件中,其中有一个名为 email 的字段。

在我的控制器中,我创建了一个操作来查询 table 邮件中的电子邮件。

后来我尝试使用用逗号分隔的 implode() 函数,但显然由于邮件程序策略它不起作用。 它生成了错误的格式 -> "email1@mail.com, email2@mail.com, email3@mail.com".

还尝试了 for each 循环和 serialize() 函数但没有成功。

json_encode() 函数接近我的需要,将一组电子邮件分隔成类似 -> "email1@mail.com"、"email2@mail.com"、"email3@mail.com" 的内容。 但它在值之前附加了字段名称,邮件程序策略不接受它。

到目前为止,我坚持使用以下代码:

public function actionSucesso()
{
    $query = new Query;
    $query->select('email')
    ->from('mail');
    $command = $query->createCommand();
    $enderecos = $command->queryAll();

    $enviar = json_encode($enderecos);

    Yii::$app->mailer->compose()
        ->setFrom('atf@website.com')
        ->setTo($enviar)
        ->setSubject('Oferta de jogo no site da ATF.')
        ->setTextBody('Aceda em: http://atf.besaba.com/index.php?r=playschedule%2Findex2')
        ->send();
    return $this->render('sucesso');
}

我认为为了让邮件程序正常工作并发送邮件,正确的格式需要是:->setTo("mail1@mail.com", "mail2@mail.com", "mail3@mail.com")

有没有办法解决这个问题? 非常感谢。

要获取带有数字索引的电子邮件数组,请使用 $fetchMode 参数 \PDO::FETCH_COLUMN 调用 queryAll() 方法,然后仅将返回的数组传递给邮件程序的 setTo() 方法。像这样

$enderecos = $command->queryAll(\PDO::FETCH_COLUMN);

//$enviar = json_encode($enderecos); <- this line no needed

Yii::$app->mailer->compose()
    ->setFrom('atf@website.com')
    ->setTo($enderecos) //you pass an array of email addresses
    ->setSubject('Oferta de jogo no site da ATF.')
    ->setTextBody('Aceda em: http://atf.besaba.com/index.php?r=playschedule%2Findex2')
    ->send();

请参阅queryAll() documentation and list of pdo constant including available fetch modes starting with PDO::FETCH_. Also assuming you are using yii2 default mailer, look for swiftmailer documentation了解如何设置收件人