Cómo enviar correo electrónico usando CodeEncendedor

⚡ Resumen inteligente

CodeIgniter Sending Email utiliza la biblioteca Email integrada del framework para enviar mensajes mediante SMTP o el servidor de correo local. Este ejemplo crea un archivo de configuración de correo electrónico, una vista de formulario de contacto y un controlador que lee la información del formulario y envía el mensaje.

  • 📧 Biblioteca integrada: La biblioteca Email envía correos electrónicos con un código mínimo y es compatible con los protocolos de correo SMTP, Sendmail y PHP.
  • ⚙️ Configuración central: Un archivo de configuración email.php personalizado almacena el protocolo, el host, el puerto, el usuario y la contraseña, de modo que la configuración permanece en un solo lugar.
  • 🔓 Credenciales SMTP: Se requieren valores válidos para smtp_host, smtp_user y smtp_pass; los parámetros ficticios nunca enviarán un correo electrónico real.
  • 📝 Formulario para controlador: Una vista de contacto recopila el destinatario, el asunto y el mensaje, que el controlador lee con la biblioteca de entrada.
  • 📤 Flujo de envío: El controlador establece el origen, el destino, el asunto y el mensaje, luego llama a send() e imprime un informe de depuración en caso de fallo.
  • 📎 HTML y archivos: Cambiar el tipo de correo a html y llamar a attach() permite enviar mensajes formateados con archivos adjuntos.
  • 🤖 Asistencia de IA: Las herramientas de IA pueden generar el controlador de correo electrónico, validar la entrada del formulario y diagnosticar errores de conexión SMTP a partir de la salida del depurador.

CodeIgniter enviando correo electrónico

El correo electrónico es fundamental en las aplicaciones web. Cuando un usuario se registra, podemos enviarle un correo electrónico para verificar su dirección y permitirle confirmar la suscripción. También utilizamos el correo electrónico para restablecer contraseñas olvidadas y enviar facturas y recibos a los clientes. CodeIgniter nos facilita enormemente el envío de correos electrónicos desde nuestra aplicación mediante una variedad de opciones.

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

CodeConfiguración de correo electrónico de Igniter

Necesitamos un lugar centralizado donde podamos gestionar la configuración del correo electrónico. CodeIgniter no incluye un archivo de configuración para correos electrónicos, por lo que tendremos que crearlo 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Í,

  • 'protocolo' => 'smtp', especifica el protocolo que desea utilizar al enviar correo electrónico. Esto podría ser Gmail Configuración SMTP o configuración SMTP de su host
  • 'smtp_host' => 'smtp.example.com', especifica el host SMTP. Por ejemplo, si desea utilizar Gmail Entonces tendrías algo como smtp.gmail.com
  • 'smtp_port' => 465, un puerto abierto en el host SMTP especificado que se ha configurado para el 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 va a utilizar, es decir, ssl, tls, etc.
  • 'mailtype' => 'text', establece el tipo de correo que se utilizará. Puede ser texto plano 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.
  • 'wordwrap' => TRUE, si se establece en TRUE, entonces el ajuste de texto está habilitado. Si se establece en FALSE, entonces el ajuste de texto 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.

CodeVista de correo electrónico de Igniter

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 llamado contact.php en 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(0)?>" 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 de correo electrónico.

CodeControlador de correo electrónico Igniter

Ahora vamos a crear el controlador que se encargará del envío de correos electrónicos.

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 extiende la clase padre. CodeControlador de encendido.
  • 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
    • Si ($this->email->send()) {…} intenta enviar el correo electrónico. Si el correo se envía correctamente, se muestra el mensaje "Su correo electrónico se ha enviado correctamente"; de lo contrario, se imprime información de depuración sobre lo que pudo haber fallado.

Vamos a definir ahora 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 contacto en el navegador web.

Vamos a iniciar el servidor PHP integrado.

Abre la terminal o la línea de comandos y navega hasta la raíz de tu 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 utilizando el siguiente comando.

php -S localhost:3000

Cargar lo siguiente URL en su navegador web: http://localhost:3000/send-email

Deberías poder ver el siguiente formulario

Rutas de correo electrónico

Introduce la dirección de correo electrónico del destinatario, el asunto y el mensaje, y haz clic en «Enviar correo electrónico». Si la configuración de tu correo electrónico es correcta, deberías ver el mensaje de confirmación.

Cómo enviar correos electrónicos HTML y archivos adjuntos en CodeEncendedor

La misma biblioteca de correo electrónico puede enviar mensajes y archivos con formato enriquecido. Dos pequeños cambios convierten el ejemplo de texto plano anterior en un correo electrónico HTML con un archivo adjunto.

$this->email->set_mailtype('html');
$this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>');
$this->email->attach('/path/to/report.pdf');
  • establecer_tipo_correo('html'): Le indica a la biblioteca que el cuerpo del mensaje contiene HTML, de modo que las etiquetas como los encabezados y los enlaces se muestren correctamente en la bandeja de entrada del destinatario.
  • adjuntar(): agrega un archivo desde una ruta del servidor al mensaje; llámelo una vez por cada archivo antes de send().

Recuerda que los correos electrónicos en formato HTML deben incluir una alternativa en texto plano, y que los servidores de correo más estrictos pueden rechazar los archivos adjuntos de gran tamaño.

Preguntas Frecuentes

Localhost normalmente no tiene un servidor de correo, por lo que el protocolo de correo falla silenciosamente. Cambie el protocolo a SMTP y proporcione un host, usuario y contraseña SMTP reales, o utilice un servicio como Mailtrampa para pruebas locales.

Establezca smtp_host en smtp.gmail.com, smtp_port en 465 con ssl y smtp_user en su Gmail dirección. Utilice una Google Contraseña de la aplicación en lugar de su contraseña normal, ya que Gmail Bloquea los inicios de sesión con contraseña básica.

El protocolo de correo utiliza la función mail() de PHP, sendmail llama al binario local del servidor y smtp se conecta a un servidor de correo externo con credenciales. SMTP es el más fiable para la entrega y la autenticación.

Sí. La IA puede crear el controlador, agregar validación de formulario para el destinatario y el sujeto, e incluir el manejo de errores y éxitos. RevRevise la configuración SMTP y agregue la limitación de velocidad antes de usarlo en producción.

Sí. Pegue la salida de print_debugger() y la IA podrá interpretar los fallos en el protocolo de enlace SMTP, los errores de autenticación o los problemas de puerto, y luego recomendar los valores correctos de host, puerto o cifrado para probar.

Resumir este post con: