0% encontró este documento útil (0 votos)
119 vistas5 páginas

Envio Correo Cakephp

by aronvx

Cargado por

pab
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
119 vistas5 páginas

Envio Correo Cakephp

by aronvx

Cargado por

pab
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

KIUVOX

MENU 

CAKEPHP 3: COMO ENVIAR CORREO ELECTRÓNICO


UTILIZANDO GMAIL
hug0 | 25 septiembre, 2015 | CakePHP 3 | 1 comentario

Desde hace un par de días he venido luchando para configurar adecuadamente el envío de correo a través de Gmail pero cada intento
me daba un error de certificados SSL que hizo que odiara la tecnología un poco más de lo usual.

Espero que esta guía ayude a aquellos que intenten realizar este tipo de tarea o a lo mejor resolver el error que yo tenía.

Lo primero es tener habilitado openssl en nuestro servidor, si utilizas Lampp (osea de Linux) este ya viene habilitado por defecto, si
estas en Windows entonces debes ir a editar el archivo /xampp/php/php.ini y encontrar la linea con el texto: extension=php_openssl.dll,
si ves un punto y coma (;) al inicio de esa línea quiere decir que esta comentado y no esta habilitado, debes eliminar ese punto y coma,
guardar el archivo y reiniciar el servidor apache.

Lo segundo antes de ir al código es saber que Gmail posee una característica por defecto de no permitir el acceso a tu cuenta si la
aplicación desde la que intentes conectarte no posee una conexión segura como un cerfiticado ssl, y lo mas probable es que en tu
servidor local no contes con uno así que vamos a habilitar el acceso de aplicaciones inseguras.

Para habilitar dicha característica primero vas a entrar en tu cuenta de correo Gmail, en la esquina superior derecha vas a ver un cirtulo
donde debería estar tu foto de perfil, haces clic ahí y luego en el botón Mi Cuenta .

Luego clic en el enlace Acceso y Seguridad .

Baja hasta ver la opción Permitir el acceso a aplicaciones menos seguras y haces clic en el botón para activarla.

Entrando en materia de código lo primero que voy a hacer es una plantilla, esta plantilla será la base del mensaje en mi correo
electrónico.

/src/Template/Email/html/correo_plantilla.ctp y le voy a poner algo sencillo:

correo_plantilla.ctp PHP
1 <p>Este es un correo de ejemplo para cakephp 3</p>
2
3 <p>Imprimimos las variables enviadas desde el controlador:</p>
4
5 <p><?= $var1; ?></p>
6 <p><?= $var2; ?></p>
7 <p><?= $var3; ?></p>

Como verán tengo 3 variables que luego llenaré desde el controlador.

El siguiente es un controlador que se llama Usuarios y voy a utilizar la configuración de correo llamada configTransport, que es una
configuración al vuelo.

/src/Controller/UsuariosController.php con el siguiente código:

UsuariosController.php PHP
1 <?php
2
3 namespace App\Controller;
4
5 use Cake\Network\Email\Email; // <-- Importante para utilizacion de correo electronico
6
7 class UsuariosController extends AppController{
8
9 public function correo(){
10 /*Para este ejemplo no necesito de renderizar
11 una vista por lo que autorender lo pongo a false
12 */
13 $this->autoRender = false;
14
15 /*configuramos las opciones para conectarnos al servidor
16 smtp de Gmail
17 */
18 Email::configTransport('mail', [
19 'host' => 'ssl://smtp.gmail.com', //servidor smtp con encriptacion ssl
20 'port' => 465, //puerto de conexion
21 //'tls' => true, //true en caso de usar encriptacion tls
22
23 //cuenta de correo gmail completa desde donde enviaran el correo
24 'username' => '[email protected]',
25 'password' => 'contrasena', //contrasena
26
27 //Establecemos que vamos a utilizar el envio de correo por smtp
28 'className' => 'Smtp',
29
30 //evitar verificacion de certificado ssl ---IMPORTANTE---
31 /*'context' => [
32 'ssl' => [
33 'verify_peer' => false,
34 'verify_peer_name' => false,
35 'allow_self_signed' => true
36 ]
37 ]*/
38 ]);
39 /*fin configuracion de smtp*/
40
41
42 /*enviando el correo*/
43 $correo = new Email(); //instancia de correo
44 $correo
45 ->transport('mail') //nombre del configTrasnport que acabamos de configurar
46 ->template('correo_plantilla') //plantilla a utilizar
47 ->emailFormat('html') //formato de correo
48 ->to('[email protected]') //correo para
49 ->from('[email protected]') //correo de
50 ->subject('Correo de prueba en cakephp3') //asunto
51 ->viewVars([ //enviar variables a la plantilla
52 'var1' => 'Hugo',
53 'var2' => 'Kiuvox',
54 'var3' => 'http://blog.kiuvox.com'
55 ]);
56
57 if($correo->send()){
58 echo "Correo enviado";
59 }else{
60 echo "Ups error man";
61 }
62 }
63 }

Esto es lo básico que podrían tener para el envío de correo electrónico, NO DEJES DE LEER QUE TENGO UNAS NOTAS IMPORTANTES .

Como verán en el configTransport he comentado la opción de tls, eso es porque ahorita utilizo ssl, pero si quisieran usar tls entonces
debería modificar estas opciones:

PHP
1 'host' => 'smtp.gmail.com',
2 'port' => 587,
3 'tls' => true,

Ahí hemos cambiado el host, le quitamos el ssl://, el puerto y activamos tls.

Segunda nota por mencionar, si prueban el código en este momento a la mayoría podría ocurrirle el siguiente error:

stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed stream_socket_client(): Failed to
enable crypto stream_socket_client(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error)

Esto es porque Openssl en php 5.6 verifica cada conexión encriptada por defecto, pero al no contar con un certificado en nuestro
servidor de desarrollo presentará el siguiente inconveniente es por eso que en el configTransport he dejado una opción comentada que
se llama context, si la descomentamos evitarémos dicha verificación que al menos en nuestro desarrollo o hasta que tengamos un
certificado ssl es conveniente para que funcione, para descomentarla quita el /* al inicio y el */ al final para que se vea así:

PHP
1 //evitar verificacion de certificado ssl ---IMPORTANTE---
2 'context' => [
3 'ssl' => [
4 'verify_peer' => false,
5 'verify_peer_name' => false,
6 'allow_self_signed' => true
7 ]
8 ]

Ahora si intentas el correo debería enviarse sin problema.

Si llegas a tener otro tipo de error como:

php_network_getaddresses: getaddrinfo failed: Fallo temporal en la resolución del nombre

Podría ser alguna restricción en tu red por parte de un router, firewall o proxy que deberías investigar por aparte.

Realmente espero que esta guía sea de ayuda para alguien porque el problema del ssl me tomo dos días encontrar como resolverlo y es
algo que quiero compartir con todos.

En la web de Cakephp podes encontrar más información sobre el uso de Email.

Hasta luego gente!!

COMPÁRTELO:

    
Tags: Xampp

RELATED POSTS
COMO GENERAR UN ARCHIVO EXCEL EN CAKEPHP 3
Dic 8,
3 comentarios | 2015

CÓMO PAGINAR RESULTADOS DE UNA CONSULTA EN CAKEPHP 3


Feb 17,
No hay comentarios | 2016

COMO ACTIVAR AUTOCOMPLETADO DE CÓDIGO DE CAKEPHP 3 EN NETBEANS 8


May 28,
5 comentarios | 2015

CAKEPHP 3: CÓMO TRABAJAR CON COOKIES


Sep 30,
No hay comentarios | 2015

ABOUT THE AUTHOR

Hug0
Ingeniero en Sistemas. Desarrollador de aplicaciones web en php, JQuery, CakePhp y base de datos
varias.

ONE COMMENT

Gio 16 junio, 2017 Responder

Excelente post! me sirvo mucho. Gracias!

DEJA UN COMENTARIO
Introduce aquí tu comentario...
REDES

Search the site 

ENTRADAS RECIENTES
Petición para hacer que KDE sea el escritorio
por defecto en Ubuntu 18.04
Ubuntu deja el escritorio Unity: Mis
impresiones
Fedora 26 Alpha ya esta disponible
Teclas para aumentar/disminuir brillo no
funcionan en Linux Mint
Linux Mint no recuerda configuración de
brillo [Solución alternativa]

CATEGORÍAS
Android (2)
Base de datos (10)
CakePHP 3 (9)
Cine (6)
Debian (5)
GNU/Linux (6)
Humor (4)
JQuery/Javascript (19)
Noticias (4)
php (29)
Sin categoría (9)
Ubuntu (13)
Windows (6)

BLOGROLL
El Blog de Liher
El Blog de Rigo
Geeky Theory
KDE Blog
La Mirada del Replicante
Linux Adictos
Linuxito
Linux GNU Blog
Portal Linux

SOFTWARE LIBRE, GNU/LINUX Y


PROGRAMACIÓN WEB EN EL
SALVADOR


COPYRIGHT © 2018 KIUVOX.
THEME BY MYTHEMESHOP.

También podría gustarte