2012-01-30 14 views

Respuesta

10

La clase de correo electrónico CodeIgniter no le permite configurar manualmente los encabezados. Sin embargo, puede cambiar esto extendiéndolo y agregando una nueva función que le permite establecer los encabezados sendgrid.

Consulte la sección "Ampliación de Bibliotecas nativos" del manual de CodeIgniter:
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
Esto es lo que el código en su nueva clase de correo electrónico podría ser similar.

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

A continuación, sería capaz de establecer cabeceras de utilizar su nueva clase de correo electrónico como este:

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

Esta página se explica lo que las cabeceras se puede pasar a SendGrid: http://sendgrid.com/docs/API%20Reference/SMTP%20API/

+0

Gracias por la explicación ... –

+0

He utilizado este método con éxito para añadir nuevas cabeceras de los mensajes salientes. Sin embargo, cuando lo uso, ya no presta atención al archivo de configuración email.php que contiene la configuración smtp. ¿Hay alguna forma de hacer ambas cosas? – Gortron

+1

Tienes razón @Gortron, cuando usas esta clase, pierdes la configuración de config/email.php; la forma en que lo resolví, es copiar toda la función CONSTRUCT() de la clase original, no hacer parent :: __ construct(); No estoy seguro de por qué está sucediendo eso, pero cuando copio el constructor completo, funciona. Voy a hacer otra respuesta a continuación, porque los comentarios son demasiado cortos para todo el código :) –

6

Alright , Solo quiero mejorar la mejor respuesta aquí. El crédito va a @Tekniskt, y la única diferencia aquí es que se ignoran las configuraciones que podría tener en /application/config/email.php, lo que duele, especialmente si está utilizando configuraciones personalizadas de STMP.

Aquí está el código completo de la clase MY_Email.php He mejorado de la respuesta anterior:

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

espero que ayude! :)

Hice mi prueba, y parece que ahora /config/email.php está incluido y la configuración se pasa correctamente.

¡Salud y gracias por la respuesta! :)

1

pasar el parámetro $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; 
    } 
} 

cabecera Set personalizado como

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