2012-01-30 109 views

回答

10

CodeIgniter电子邮件类不允许您手动设置标题。但是,您可以通过扩展它并添加一个允许您设置sendgrid标题的新函数来更改此设置。

见笨手册中的“扩展的本地库”部分:
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
这里有新的电子邮件类的代码可能是什么样子。

class MY_Email extends CI_Email { 

    public function __construct(array $config = array()) 
    { 
     parent::__construct($config); 
    } 

    public function set_header($header, $value){ 
     $this->_headers[$header] = $value; 
    } 
} 

那么你可以使用新的电子邮件类这样的设置标题:

$this->email->set_header($header, $value); 

本节会解释可以被传递到SendGrid什么标题: http://sendgrid.com/docs/API%20Reference/SMTP%20API/

+0

感谢您的解释... – 2012-01-30 11:09:33

+0

我已经用这种方法成功地新头添加到传出邮件。但是,当我使用它时,它不再注意包含smtp设置的email.php配置文件。有两种方法可以做到吗? – Gortron 2013-12-01 12:28:29

+1

你是对的@Gortron,当你使用这个类,你失去了config/email.php的设置;我解决它的方法是从原始类复制整个CONSTRUCT()函数,不要执行parent :: __ construct();不知道为什么发生这种情况,但是当我复制完整的构造函数时,它就可以工作。我会在下面提供另一个答案,因为整个代码的评论太短了:) – 2014-02-11 14:26:29

6

好吧,我只想在这里改进最好的答案。 Credit归属于@Tekniskt,这里唯一的区别是你可能在/application/config/email.php中设置的设置会被忽略,这会伤害你,特别是如果你使用自定义的STMP设置。

下面是类的完整代码MY_Email.php我从上面的答案改进:

class MY_Email extends CI_Email { 

public function __construct($config = array()) 
{ 
    if (count($config) > 0) 
    { 
     $this->initialize($config); 
    } 
    else 
    { 
     $this->_smtp_auth = ($this->smtp_user == '' AND $this->smtp_pass == '') ? FALSE : TRUE; 
     $this->_safe_mode = ((boolean)@ini_get("safe_mode") === FALSE) ? FALSE : TRUE; 
    } 

    log_message('debug', "Email Class Initialized"); 
} 

// this will allow us to add headers whenever we need them 
public function set_header($header, $value){ 
    $this->_headers[$header] = $value; 
    } 
} 

希望它能帮助! :)

我做了我的测试,它似乎现在包含/config/email.php并设置正确传递。

干杯和谢谢你的答案! :)

1

传递$config参数

class MY_Email extends CI_Email 
{ 
    public function __construct(array $config = array()) 
    { 
    parent::__construct($config); 
    } 

    public function set_header($header, $value) 
    { 
    $this->_headers[ $header ] = $value; 
    } 
} 

设置自定义标题为

$this->email->set_header($header, $value); 
相关问题