Publicidad

Enviar emails desde Codeigniter 4


Por Alex el 17/10/2022, Comentar el artículo

Comparte este artículo:      




Codeigniter 4 dispone de una clase para enviar e-mails cómodamente y también de una clase para configurar el envío de e-mails. En este articulo vamos a ver como utilizarla.


Aquí (https://codeigniter.com/user_guide/libraries/email.html) podéis encontrar toda la documentación sobre el envío de e-mails en Codeigniter 4.

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:

  1. La clase de configuración del servicio de email
  2. Creación de una clase propia en Libraries para el envio de mails
  3. Creación de un controlador
  4. 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.php

Y 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
/

Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.