发送邮件时使用环境变量 - CakePHP

时间:2014-03-15 21:36:23

标签: php email cakephp

我正在配置CakePHP电子邮件,但在使用环境变量方面遇到了麻烦。我可以在使用标准格式(由CakePHP“Cookbook”提供)时使用电子邮件功能,但出于安全考虑,我更倾向于使用环境变量作为用户名和密码字段。

这有效:

public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'my@gmail.com',
        'password' => 'secret',
        'transport' => 'Smtp'
);

然而,这不是:

public $gmail = array(
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => getenv('USERNAME'),
    'password' => getenv('PASSWORD'),
    'transport' => 'Smtp'
);

变量设置正确,因为我可以使用“echo”将它们打印到屏幕上。我也试过这个,但无济于事:

$env_username = getenv('USERNAME');
$env_password = getenv('PASSWORD');
class EmailConfig {
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => $env_username,
        'password' => $env_password,
        'transport' => 'Smtp'
    );
}

任何人都知道我做错了什么?感谢。

2 个答案:

答案 0 :(得分:3)

类成员只能使用可在编译时计算的常量值进行初始化(布尔值,数字,字符串等)。

<强> http://www.php.net/manual/en/language.oop5.properties.php

如上所述,您可以在类构造函数中定义动态配置数据:

<强> http://book.cakephp.org/2.0/en/core-utility-libraries/email.html#configuration

class EmailConfig {
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => null,
        'password' => null,
        'transport' => 'Smtp'
    );

    public function __construct() {
        $this->gmail['username'] = getenv('USERNAME');
        $this->gmail['password'] = getenv('PASSWORD');
    }
}

答案 1 :(得分:0)

尝试在config \ core中设置变量,例如

Configure::write('MyEmailConfig1', array(
       username => 'SetYourUsername',
       password => 'SetYourPassword'
));

然后你可以从你的config \ email中读取它。这样的事情......

public $gmail = array(
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => Configure::read('MyEmailConfig1.username'),
    'password' => Configure::read('MyEmailConfig1.password'),
    'transport' => 'Smtp'
);