Send emails to multiple recipients from DB zend 2

2019-09-19 06:54发布

i wan't to send the same mail to multiple recipients retreived from database, using zend framework 2. With my solution i can only send email to the first row on my database, and i do not no what's the problem exactly. This is my action in the indexController:

    public function eventdetailsAction() {
    $id = (int) $this->params()->fromRoute('id', 0);
    $this->layout()->setVariable('lang', $this->params()->fromRoute('lang',     'en_US'));
    $this->layout()->setVariable('action', $this->params()->fromRoute('action', 'index'));
    $request = $this->getRequest();
    $aPost = $request->getPost();
    if (isset($aPost['invitUser'])) {

        $user = new Container('user');
        $db = $this->getServiceLocator()->get('db1');

        if (!$user->offsetExists('id')) {
            $idconnected = '0';
        } else {

            $user = new Container('user');
            $db = $this->getServiceLocator()->get('db1');

            if (!$user->offsetExists('id')) {
                $idconnected = '0';
            } else {

                $idconnected = $user->offsetGet('id');
                $mail = $db->query("SELECT * FROM user")->execute()->current();
                print_r($mail);
                exit();
                $message = new Message();
                foreach ($mail as $recip) {
                    $message->addTo($recip)
                            ->addFrom('xxxxx@gmail.com')
                            ->setSubject('Invitation for the event : Event Latino');
                }

                // Setup SMTP transport using LOGIN authentication
                $transport = new SmtpTransport();
                $options = new SmtpOptions(array(
                    'host' => 'smtp.gmail.com',
                    'connection_class' => 'login',
                    'connection_config' => array(
                        'ssl' => 'tls',
                        'username' => 'xxxxx@gmail.com',
                        'password' => 'xxxxxx'
                    ),
                    'port' => 587,
                ));

                $html = new MimePart('<b>Invitation for the event: Latin Night, orgonized by Mr. Jony Cornillon. Date : 06/04/2015</b>');
                $html->type = "text/html";

                $body = new MimeMessage();
                $body->addPart($html);
                //$body->setParts(array($html));

                $message->setBody($body);

                $transport->setOptions($options);
                $transport->send($message);
            }
        }
    }
  }

And also when i put printr($mail); exit(); to show the result, only the first line will be displayed on the page. Any help please.

2条回答
三岁会撩人
2楼-- · 2019-09-19 07:06

In the line below you are executing the query, and then obtaining the current() record from the result set the execute() call returned. That will always give you the first record in the result set.

$mail = $db->query("SELECT * FROM user")->execute()->current();

Change that to

$mail = $db->query("SELECT * FROM user")->execute();

and you should be able to iterate over the result set as expected.

查看更多
Animai°情兽
3楼-- · 2019-09-19 07:20

i find another solution and i can succefully diplay all emails from database with print_r. However now when i put the resultset on the message->addTo(), an error will diplay. This is my new code

    $sql = "SELECT * FROM user";
                $statement = $db->query($sql);
                $res = $statement->execute();

                if ($res instanceof ResultInterface && $res->isQueryResult()) {
                    $resultSet = new ResultSet;
                    $resultSet->initialize($res);

                    $message = new Message();
                    foreach ($resultSet as $row) {
                        echo $row->email . PHP_EOL;
                        $message->addTo($row->email)
                                ->addTo('xxxxx@hotmail.com', 'eee@web.com')
                                ->addFrom('xxxxx@gmail.com')
                                ->setSubject('Invitation for the event : Event Latino');
                    }

Any help please. Thanks.

查看更多
登录 后发表回答