从DB zend 2向多个收件人发送电子邮件

时间:2015-04-03 11:50:23

标签: database model-view-controller zend-framework2

我不想使用zend框架2将相同的邮件发送到从数据库中检索的多个收件人。使用我的解决方案我只能发送电子邮件到我的数据库的第一行,而我不会发送什么&#39确切地说是问题所在。 这是我在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);
            }
        }
    }
  }

当我将printr($mail); exit();显示结果时,页面上只会显示第一行。请帮忙。

2 个答案:

答案 0 :(得分:0)

在下面的行中,您正在执行查询,然后从返回的current()调用的结果集中获取execute()记录。这将始终为您提供结果集中的第一条记录。

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

将其更改为

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

并且您应该能够按预期迭代结果集。

答案 1 :(得分:0)

我找到了另一个解决方案,我可以使用print_r成功地从数据库中显示所有电子邮件。但是现在当我将结果集放在message->addTo()上时,会出现错误。这是我的新代码

    $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');
                    }

请帮忙。感谢。