2012-01-30 120 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); 
相關問題