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;
....
}
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";
    }
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);
    }
  }
}
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');
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";
}
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'];
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
/






















