Cómo enviar correos electrónicos con CodeIgniter

El correo electrónico es muy importante en las aplicaciones web. Cuando un usuario se registra, es posible que queramos enviarle un correo electrónico para verificar su dirección de correo electrónico y permitirle confirmar la suscripción. También utilizamos el correo electrónico para restablecer contraseñas olvidadas, enviar facturas y recibos a los clientes, etc. CodeIgniter nos permite enviar correos electrónicos desde nuestra aplicación de forma muy sencilla mediante una variedad de opciones.

CodeIgniter tiene una biblioteca de correo electrónico incorporada con la que podemos trabajar al enviar correos electrónicos.

Configuración de correo electrónico de CodeIgniter

Necesitamos tener un lugar central donde podamos administrar la configuración de correo electrónico. CodeIgniter no incluye un archivo de configuración para correos electrónicos, por lo que tendremos que crear uno nosotros mismos.

Cree un archivo email.php en el directorio application/config

Añade el siguiente código a email.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');

$config = array(
    'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
    'smtp_host' => 'smtp.example.com', 
    'smtp_port' => 465,
    'smtp_user' => 'no-reply@example.com',
    'smtp_pass' => '12345!',
    'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example
    'mailtype' => 'text', //plaintext 'text' mails or 'html'
    'smtp_timeout' => '4', //in seconds
    'charset' => 'iso-8859-1',
    'wordwrap' => TRUE
);

AQUÍ,

  • 'protocol' => 'smtp', especifica el protocolo que desea utilizar al enviar correo electrónico. Puede ser la configuración SMTP de Gmail o la configuración SMTP de su host
  • 'smtp_host' => 'smtp.example.com', especifica el host SMTP. Por ejemplo, si desea utilizar Gmail, deberá escribir algo como smtp.gmail.com
  • 'smtp_port' => 465, un puerto abierto en el host SMTP especificado que se ha configurado para correo SMTP
  • 'smtp_user' => 'no-reply@example.com', la dirección de correo electrónico que se utilizará como remitente al enviar correos electrónicos. Debe ser una dirección de correo electrónico válida que exista en el servidor
  • 'smtp_pass' => '12345!', la contraseña del correo electrónico del usuario SMTP especificado
  • 'smtp_crypto' => 'ssl', especifica el método de cifrado que se utilizará, es decir, ssl, tls, etc.
  • 'email type' => 'text', establece el tipo de correo electrónico que se utilizará. Puede ser texto simple o HTML, según sus necesidades.
  • 'smtp_timeout' => '4', especifica el tiempo en segundos que debe transcurrir al intentar conectarse al host antes de que se produzca una excepción de tiempo de espera.
  • 'charset' => 'iso-8859-1', define el conjunto de caracteres que se utilizará al enviar correos electrónicos.
  • 'Wrap' => TRUE se establece en TRUE y luego se habilita el ajuste de palabras. Si se establece en FALSO, entonces el ajuste de palabras no está habilitado

Nota: :Para que funcione el envío de correos electrónicos, debe proporcionar parámetros de configuración válidos. Los parámetros ficticios no permitirán enviar correos electrónicos.

Ver correo electrónico de CodeIgniter

En esta sección, crearemos la vista que enviará el correo electrónico al destinatario.

Crear un nuevo directorio de correo electrónico en aplicación/vistas

Crea un nuevo archivo contact.php application/views/email

Agregue el siguiente código a application/views/email/contact.php

<!DOCTYPE html>
<html>
    <head>
        <title>CodeIgniter Send Email</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>
            <h3>Use the form below to send email</h3>
            <form method="post" action="<?=base_url('email')?>" enctype="multipart/form-data">
                <input type="email" id="to" name="to" placeholder="Receiver Email">
                <br><br>
                <input type="text" id="subject" name="subject" placeholder="Subject">
                <br><br>
                <textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea>
                <br><br>
                <input type="submit" value="Send Email" />
            </form>
        </div>
    </body>
</html>

AQUÍ,

  • Tenemos un formulario HTML básico que acepta el correo electrónico, el asunto y el mensaje y luego pasa los parámetros a la ruta del correo electrónico.

Controlador de correo electrónico CodeIgniter

Ahora vamos a crear el controlador que se encargará de enviar el correo electrónico.

Crea un nuevo archivo EmailController.php en application/controllers/EmailController.php

Agregue el siguiente código a EmailController.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class EmailController extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
    }

    public function index() {
        $this->load->view('email/contact');
    }

    function send() {
        $this->load->config('email');
        $this->load->library('email');
        
        $from = $this->config->item('smtp_user');
        $to = $this->input->post('to');
        $subject = $this->input->post('subject');
        $message = $this->input->post('message');

        $this->email->set_newline("\r\n");
        $this->email->from($from);
        $this->email->to($to);
        $this->email->subject($subject);
        $this->email->message($message);

        if ($this->email->send()) {
            echo 'Your Email has successfully been sent.';
        } else {
            show_error($this->email->print_debugger());
        }
    }
}

AQUÍ,

  • La clase EmailController extiende CI_Controller {…} define nuestro controlador de correo electrónico que expande el controlador principal CodeIgniter.
  • La función pública __construct() {…} define el constructor secundario que llama al método constructor principal.
  • función pública index() {…} define el método de índice que muestra el formulario de contacto
  • La función send() {…} define el método que envía el correo electrónico.
    • $this->load->config('email'); carga la configuración del correo electrónico
    • $this->load->library('email'); carga la biblioteca de correo electrónico
    • $from = $this->config->item('smtp_user'); obtiene el ID del remitente del archivo de configuración de correo electrónico que definimos.
    • $a = $this->entrada->post('a'); obtiene el valor del formulario enviado
    • $subject = $this->input->post('subject'); establece el asunto del correo electrónico desde el formulario
    • $message = $this->input->post('message'); establece el mensaje de correo electrónico del formulario
    • $this->email->set_newline(“\r\n”); define los caracteres de nueva línea para los correos electrónicos
    • $this->email->from($from); establece la dirección de correo electrónico del remitente
    • $this->email->to($to); establece la dirección de correo electrónico del destinatario
    • $this->email->subject($subject); establece el asunto del correo electrónico
    • $this->email->message($message); establece el mensaje de correo electrónico
    • if ($this->email->send()) {…} intenta enviar el correo electrónico. Si el correo electrónico se envía correctamente, se imprime el mensaje Su correo electrónico se ha enviado correctamente; de ​​lo contrario, se imprime información de depuración sobre lo que podría haber salido mal.

Ahora definamos las rutas de correo electrónico.

Rutas de correo electrónico

Agregue las siguientes rutas a application/config/routes.php

$route['send-email'] = 'EmailController';
$route['email'] = 'EmailController/send';

Ahora podemos cargar el formulario de contactos en el navegador web.

Iniciemos el servidor PHP integrado.

Abra la terminal/línea de comando y busque la raíz de su aplicación. En mi caso, la raíz se encuentra en la unidad C:\Sites\ci-app

cd C:\Sites\ci-app

Inicie el servidor usando el siguiente comando

php -S localhost:3000

Cargue la siguiente URL en su navegador web: http://localhost:3000/send-email

Deberías poder ver el siguiente formulario

Rutas de correo electrónico

Ingrese el correo electrónico del destinatario, el asunto y el mensaje de correo electrónico y luego haga clic en Enviar correo electrónico. Si la configuración de correo electrónico está configurada correctamente, debería poder ver el mensaje enviado correctamente.

Resumen

La biblioteca de correo electrónico incorporada nos permite enviar correos electrónicos fácilmente con un código mínimo. La biblioteca también es muy flexible en el sentido de que puede configurarla para que se ajuste a sus necesidades.