2012-01-30 12 views
6

Chciałbym wysłać kilka dodatkowych informacji na temat wiadomości e-mail wysyłanych z biblioteki kodów znaków. Czy istnieje sposób na skonfigurowanie lub dodanie tego?Dodaj dodatkowe informacje w nagłówku w emailu codeigniter

Chcę skategoryzować wszystkie wiadomości wychodzące z mojej strony. Muszę dołączyć nagłówek kategorii sendgrid do śledzenia.

Odpowiedz

10

Klasa mailowa CodeIgniter nie pozwala ręcznie ustawić nagłówków. Można jednak to zmienić, rozszerzając go i dodając nową funkcję, która pozwala ustawić nagłówki sendgrid.

Patrz „Rozszerzanie rodzime biblioteki” w podręczniku CodeIgniter:
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
oto co kod w swojej nowej klasy e-mail może wyglądać.

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

Można by następnie móc ustawić nagłówki za pomocą nowej klasy e-mail tak:

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

Ta strona wyjaśni co nagłówki mogą być przekazywane do SendGrid: http://sendgrid.com/docs/API%20Reference/SMTP%20API/

+0

Dzięki za wyjaśnienie ... –

+0

Użyłem tej metody z powodzeniem dodawać nowe nagłówki do wysyłanych maili. Jednak kiedy go używam, nie zwraca już uwagi na plik konfiguracyjny email.php, który przechowuje ustawienia smtp. Czy jest jakiś sposób na zrobienie obu? – Gortron

+1

Masz rację, gdy używasz tej klasy @Gortron, tracisz ustawienia z pliku config/email.php; sposób, w jaki go rozwiązałem, polega na skopiowaniu całej funkcji CONSTRUCT() z oryginalnej klasy, nie wykonuj parent :: __ construct(); nie wiem, dlaczego tak się dzieje, ale kiedy kopiuję pełny konstruktor, działa. Podam kolejną odpowiedź poniżej, ponieważ komentarze są zbyt krótkie dla całego kodu :) –

6

W porządku , Chcę tylko poprawić najlepszą odpowiedź tutaj. Kredyt trafia do @Tekniskt, a jedyną różnicą jest to, że ustawienia, które możesz mieć w /application/config/email.php są ignorowane, co boli, szczególnie jeśli używasz niestandardowych ustawień STMP.

Oto pełny kod klasy MY_Email.php Mam poprawił się z odpowiedzią powyżej:

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

Nadzieję, że to pomaga! :)

Zrobiłem mój test i wygląda na to, że teraz dołączono /config/email.php i ustawienia są poprawnie przekazywane.

Pozdrawiam i dziękuję za odpowiedź! :)

1

przekazać parametr $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; 
    } 
} 

Ustaw niestandardowy nagłówek jako

$this->email->set_header($header, $value); 
Powiązane problemy