En este artículo no se explica Codeigniter 4 supone que se tienen unos mínimos conocimientos, aquí encontrareis mas información sobre codeigniter.
Voy a dividir en cuatro partes el artículo para ir explicando paso a paso lo que yo he hecho para enviar e-mails.
El código de este artículo esta en el github: https://github.com/depruebas/ci4-envio-mails
Indice:
- La clase de configuración del servicio de email
- Creación de una clase propia en Libraries para el envio de mails
- Creación de un controlador
- Creación de una vista
1 - La clase de configuración del servicio de email
En la carpeta config hay una clase Email donde están todos los parámetros necesarios para enviar e-mails puestos en formato de propiedades de la siguiente forma:
class Email extends BaseConfig
{
/**
* @var string
*/
public $fromEmail;
/**
* @var string
*/
public $fromName;
....
}
Estas propiedades se tienen que modificar para poner las nuestras. Los parametros de envio que nosotros necesitamos como el SMTP Host, SMTP user, etc ...
Pero en este ejemplo no vamos a modificar las propiedades directamente sino que al final de la clase vamos a crearnos un método que cambie esta propiedades, así, si tenemos diferentes métodos de envío podemos ir cambiado con solo modificar las propiedades en esta clase:
public function OverWriteEmailConfigs()
{
$this->userAgent = "NET - netveloper.com";
$this->protocol = "smtp";
$this->SMTPHost = "mailjet";
$this->SMTPPort = 587;
$this->SMTPUser = "dd";
$this->SMTPPass = "dd";
$this->charset = "UTF-8";
$this->mailType = "html";
$this->newline = "\r\n";
$this->fromEmail = "mail@dominio.com";
$this->fromName = "netveloper.com";
}
En este método he puesto cambio las propiedades que necesito, los datos los podría haber pasado como un array y así ser dinámicos si tuviera diferentes métodos de envío.
2 - Creación de una clase propia en Libraries para el envio de mails
Una vez tenemos las variables seteadas en la configuración de codeigniter vamos a crearnos una clase custom para enviar e-mails.En el directorio Libraries creamos una nueva clase llamada EmailsSender (llamarla como queráis) y con este código dentro.
namespace App\Libraries;
class EmailsSender
{
public function SendEmails( $data = [])
{
# Caragamos la configuración del envió de emails
$config = config('Email');
# Modificamos los datos de configuración con los que hemos puesto en nuestro método
$config->OverWriteEmailConfigs();
# Inicializamos el servicio de envío de mails de CI4
$email = \Config\Services::email();
$email->initialize( $config);
$email->setTo( $data['emailTO']);
//$email->setCC( $data['emailCC']);
//$email->setBCC( $data['emailBCC']);
$email->setSubject( $data['subject']);
$email->setMessage( $data['message']);
if ($email->send())
{
return (true);
}
else
{
$pathLogs = dirname(dirname(dirname( __FILE__))) . "/../../writable/logs/";
$data_error = $email->printDebugger(['headers']);
error_log( date("Y-m-d H:i:s") . " - " . json_encode( $data, true) . "\n", 3, $pathLogs."email_error.log");
error_log( date("Y-m-d H:i:s") . " - " . print_r( $data_error, true) . "\n", 3, $pathLogs."email_error.log");
return (false);
}
}
}
Ahora que tenemos la clase vamos a probarla creando un controlador.
3 - Creación de un controlador
Antes de crear el controlador vamos a crear dos rutas en el fichero Config/Routes.php para mostrar la página donde crearemos el formularios y la ruta que procesara el formulario.
$routes->get('/form', 'FormController::index');
$routes->get('/send', 'FormController::send');
$routes->post('/send', 'FormController::send');
La ruta con el método get (/form) mostrará el formulario a rellenar que veremos en el proximo punto.
Y la ruta con el método post (/send) es el que envia el formulario, el método get solo es para probar la url desde el navegador.
Vamos a crear los dos métodos en el controlador nuevo que llamaremos Controllers/FormController.php y creamos dos métodos index y send.
En el método index no ponemos nada porque sera donde crearemos el formulario en la vista.
En el método send ponemos lo siguiente:
# Referenciamos nuestra clase para enviar mails
$email = new \App\Libraries\EmailsSender();
# Pasamos los parámetros del envío
$data['emailTO'] = "hola@dominio.com";
$data['subject'] = "Esto es un email de prueba";
$data['message'] = "Y esto es un texto de pruebas";
if ( $email->SendEmails( $data))
{
echo "Envío Correcto";
}
else
{
echo "Ha habido un error revisa los logs";
}
Estos datos son para hacer la prueba ahora probamos que funcione ejecutando nuestra url que seria:
http://dominio.com/send
Y si todo va bien saldrá el mensaje "Envío Correcto"4 - Creación de una vista
Lo hacemos directamente en el directorio Views y la llamamos index.php. y dentro ponemos un formulario, podéis verlo en el link del github https://github.com/depruebas/ci4-envio-mails/blob/master/app/Views/index.phpY ahora modificamos el código del controlador para que recoja lo que se envía del formulario html de la siguiente forma, cambiando los datos de prueba:
# Pasamos los parámetros del envío
$data['emailTO'] = $_POST['email'];
$data['subject'] = $_POST['titulo'];
$data['message'] = $_POST['texto'];
Podéis ver el código completo del controlador aquí https://github.com/depruebas/ci4-envio-mails/blob/master/app/Controllers/FormController.php
El código completo en: https://github.com/depruebas/ci4-envio-mails
Y esto es todo, ya tenemos un sistema para enviar mails desde Codeigniter 4
También puede interesar: Enviar e-mails con plantillas en Codeigniter 4
Y esto es todo, feliz programming
Saludos
Alex
/
También puede interesarte:
Configurar Laravel Sail para utilizar un MySql externo existente |
||