2012-01-30 48 views
6

Tôi muốn gửi một số thông tin bổ sung về các email được gửi từ thư viện mã vạch. Có cách nào để định cấu hình hoặc thêm điều này không?Thêm thông tin tiêu đề bổ sung trong email codeigniter

Tôi muốn phân loại tất cả thư đi từ trang web của mình. Tôi cần bao gồm tiêu đề danh mục sendgrid để theo dõi.

Trả lời

10

Lớp email CodeIgniter không cho phép bạn đặt tiêu đề theo cách thủ công. Tuy nhiên bạn có thể thay đổi điều này bằng cách mở rộng nó và thêm một chức năng mới cho phép bạn thiết lập các tiêu đề sendgrid.

Hãy xem phần "Mở rộng Native Libraries" của hướng dẫn CodeIgniter:
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
Đây là những gì các mã trong lớp email mới của bạn có thể trông như thế nào.

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

Sau đó bạn sẽ có thể thiết lập tiêu đề sử dụng lớp email mới của bạn như thế này:

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

Trang này sẽ giải thích những gì tiêu đề có thể được truyền cho SendGrid: http://sendgrid.com/docs/API%20Reference/SMTP%20API/

+0

Cảm ơn lời giải thích ... –

+0

Tôi đã sử dụng phương pháp này thành công để thêm tiêu đề mới cho mail gửi đi. Tuy nhiên khi tôi sử dụng nó, nó không còn quan tâm đến tập tin cấu hình email.php mà giữ các thiết lập smtp. Có cách nào để làm cả hai? – Gortron

+1

Bạn đúng @Gortron, khi bạn sử dụng lớp này, bạn sẽ mất cài đặt từ config/email.php; cách tôi giải quyết nó, là sao chép toàn bộ hàm CONSTRUCT() từ lớp gốc, không làm cha mẹ :: __ construct(); không chắc chắn tại sao điều đó lại xảy ra, nhưng khi tôi sao chép toàn bộ hàm tạo, nó hoạt động. Tôi sẽ thực hiện một câu trả lời dưới đây, bởi vì các ý kiến ​​là quá ngắn cho toàn bộ mã số :) –

6

rồi , Tôi chỉ muốn cải thiện câu trả lời tốt nhất ở đây. Tín dụng chuyển đến @Tekniskt và sự khác biệt duy nhất ở đây là các cài đặt mà bạn có thể có trong /application/config/email.php sẽ bị bỏ qua, điều này gây khó chịu, đặc biệt nếu bạn đang sử dụng cài đặt STMP tùy chỉnh.

Dưới đây là đoạn code đầy đủ của lớp MY_Email.php tôi đã cải thiện từ câu trả lời ở trên:

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

Hy vọng nó sẽ giúp! :)

Tôi đã làm bài kiểm tra của mình và có vẻ như bây giờ là /config/email.php được bao gồm và cài đặt được chuyển đúng cách.

Chúc mừng và cảm ơn câu trả lời! :)

1

Vượt qua tham số $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; 
    } 
} 

tiêu đề Set tùy chỉnh như

$this->email->set_header($header, $value); 
Các vấn đề liên quan