【问题标题】:Using Environment Variables when sending mail - CakePHP发送邮件时使用环境变量 - CakePHP
【发布时间】:2014-04-21 05:21:33
【问题描述】:

我正在配置 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'
    );
}

有人知道我做错了什么吗?谢谢。

【问题讨论】:

    标签: php email cakephp


    【解决方案1】:

    尝试在 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'
    );
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这是有道理的——这就是我所缺少的。这非常有效 - 谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多