如何在zend框架中的电子邮件的bootstrap文件中发送动态数据

时间:2014-11-13 03:08:27

标签: php zend-framework

我在注册时向用户发送电子邮件。为此,我使用Zend的默认功能。 为此,我在我的Bootstrap文件中添加了代码。

protected function _initMail()
    {
        try {
            $config = array(
                'auth' => 'login',
                'username' => 'username@gmail.com',
                'password' => 'password',
                'ssl' => 'tls',
                'port' => 587
            );
            $mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
            Zend_Mail::setDefaultTransport($mailTransport);
        } catch (Zend_Exception $e){
        }
    }

现在我需要的是用户名,密码和端口我想让这个字段动态化。我想从数据库中获取此记录。任何人都可以告诉我,我该如何解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我会说你没有将这些放入数据库。更好的方法是将它们放入配置文件,然后从那里设置它们。执行数据库调用每个单一时间调用应用程序并不是最佳选择。

你应该这样做的方式是:

protected function _initMail()
    {
        try {
            $config = Zend_Controller_Front::getInstance()->getParam('bootstrap');

            $config = $config->getOption("mail");
            $mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
            Zend_Mail::setDefaultTransport($mailTransport);
        } catch (Zend_Exception $e){
        }
    }

假设你的application.ini有这个:

mail.auth="login"
mail.username="username@gmail.com"
mail.password="password"
mail.ssl="tls"
mail.port=587

然而如果您决定要这样做,并在application.ini文件中设置数据库(假设您使用ini文件进行配置),请执行以下操作:

resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "your.database.host"
resources.db.params.dbname = "database_name"
resources.db.params.username = "username"
resources.db.params.password = "password"
resources.db.isDefaultTableAdapter = true

然后你可以这样做:

protected function _initMail()
{
    $resource = $bootstrap->getPluginResource('db');
    $db = $resource->getDbAdapter();
    $select=$db->select()->from("emailSetup");
    $credentials=$db->fetchOne($select);
    [..email part here..]
}

P.S。我没有测试过选择,但你应该得到它的要点。