example - Codeigniter SMTP Email con Amazon SES
phpmail (5)
Creo que ayer Amazon anunció el soporte SMTP para SES (Simple Email Service).
Intenté enviar un correo electrónico SMTP con Codeigniter sin suerte.
Tengo un remitente verificado y todo se ve bien:
$this->load->library(''email'');
$config = array(
''protocol'' => ''smtp'',
''smtp_host'' => ''email-smtp.us-east-1.amazonaws.com'',
''smtp_user'' => ''SMTP USERNAME'',
''smtp_pass'' => ''SMTP PASSWORD'',
''smtp_port'' => 465,
''mailtype'' => ''html''
);
$this->email->initialize($config);
$this->email->print_debugger();
$this->email->from(''[email protected]'', ''Test From'');
$this->email->to(''[email protected]'', ''Test To'');
$this->email->subject(''Test'');
$this->email->message(''test'');
$this->email->send();
Probé el siguiente smtp_host:
- email-smtp.us-east-1.amazonaws.com
- tls: //email-smtp.us-east-1.amazonaws.com
- ssl: //email-smtp.us-east-1.amazonaws.com
Cuando hago eco del print_debugger () obtengo:
220 email-smtp.amazonaws.com ESMTP SimpleEmailService-194655181
hello: 421 Timeout waiting for data from client.
Estas pruebas se ejecutan en un servidor de mediatemple (gs).
Debe hacer 3 cosas para que CI funcione con el Servicio de correo electrónico simple de Amazon (SES)
- Necesita configurar
newline = /r/n
o obtendrá un tiempo de espera. - Necesito configurar
smtp_crypto
para algo. (Nuevo requerimiento) - Debe asegurarse de que la dirección de correo electrónico "de" esté aprobada en Amazon SES. Hice mi "de" dirección de correo electrónico "[email protected]"
Además, debe configurar DKIM para su dirección de correo electrónico "de" para evitar que los correos electrónicos se coloquen en carpetas de correo no deseado. Esto implica ingresar a Amazon SES -> Administración de identidades -> Direcciones de correo electrónico -> DKIM, presionar el botón de habilitación y agregar 3 entradas de DNS al DNS de su sitio web.
No hay necesidad de hacer nada especial para configurar SPF. El dominio de sobre amazonses.com pasa SPF.
Por último, asegúrese de usar "responder a" si desea que los usuarios puedan responder a una dirección de correo electrónico diferente de su dirección de correo electrónico "de" aprobada.
Ejemplo de código de trabajo:
$obj = &get_instance();
$config[''protocol''] = ''smtp'';
$config[''smtp_host''] = ''email-smtp.us-west-2.amazonaws.com'';
$config[''smtp_user''] = ''USER'';
$config[''smtp_pass''] = ''PASS'';
$config[''smtp_port''] = ''587'';
$config[''newline''] = "/r/n";
$config[''smtp_crypto''] = ''tls'';
$obj->email->initialize($config);
$obj->email->set_mailtype(''html'');
// don''t html_escape email header variables
$obj->email->from(MV_FROM_EMAIL, $from_name);
$obj->email->reply_to($from_email, $from_name);
$obj->email->to($to);
$obj->email->subject($subject);
$obj->email->message($obj->load->view($path, html_escape($data), true));
$obj->email->send();
La configuración que funcionó para mí se ve así:
$test_config[''protocol''] = ''smtp'';
$test_config[''smtp_host''] = ''ssl://email-smtp.us-east-1.amazonaws.com'';
$test_config[''smtp_port''] = ''465'';
$test_config[''smtp_user''] = ''XXXXXXXXXXXXXXXXXXX'';
$test_config[''smtp_pass''] = ''YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'';
$test_config[''newline''] = "/r/n";
$this->email->initialize($test_config);
$this->email->from(''[email protected]'', ''From at Test.com'');
$this->email->to(''[email protected]'');
$this->email->subject(''Email Test'');
$this->email->message(''Testing the email class.'');
$this->email->send();
El carácter de nueva línea debe establecerse en "/ r / n", y puede apostar en el archivo de configuración, si se establece correctamente como "/ r / n", no en "/ r / n" como se indicó anteriormente.
Recibí ese mensaje de tiempo de espera hasta que agregué la línea:
$this->email->set_newline("/r/n");
Tengo mi host configurado como ssl://email-smtp.us-east-1.amazonaws.com
También necesitaba agregar la línea
$config[''smtp_crypto''] = ''tls'';
a mi matriz de configuración
Esto es soportado por CI 2.1.0 y mayor
public function enviar_email($para, $assunto, $mensagem, $formato=''html''){
$this->CI->load->library(''email'');
$config[''mailtype''] = $formato;
$config[''useragent''] = ''Post Title'';
$config[''protocol''] = ''smtp'';
$config[''smtp_host''] = ''tls://email-smtp.us-east-1.amazonaws.com'';
$config[''smtp_user''] = ''smtpuser'';
$config[''smtp_pass''] = ''smtppass'';
$config[''smtp_port''] = ''465'';
$config[''wordwrap''] = TRUE;
$config[''newline''] = "/r/n";
$this->CI->email->initialize($config);
$this->CI->email->from(''Your Verified Sender Email'', ''Post Title'');
$this->CI->email->to($para);
$this->CI->email->subject($assunto);
$this->CI->email->message($mensagem);
if($this->CI->email->send()):
return TRUE;
else:
$this->CI->email->print_debugger();
endif;
}