Lección 10: E-Mails | Curso PHP 8.x

Lección 10: E-Mails

Enviar email en texto plano

Si estas ejecutando PHP en un lugar que dispone de un servidor SMTP configurado, puedes enviar correos usando mail(). Prácticamente todos los hosting ya están preparados.

mail(string $email_destinatario, string $asunto, string $mensaje, array $headers[]);

En el ejemplo indicamos, por medio de cabeceras, la dirección del emisario (nosotros por medio de From) y configuramos el correo para que admita acentos o carácteres especiales del español (Content-type).

$headers = [
    'From' => 'curso@php.com',
    'Content-type' => 'text/plain; charset=utf-8'
];
mail('correo@falso.com', 'Día especial', 'Gracias por suscribirte', $headers);

Los saltos de línea se realizan con "\n".

Configurar el servidor SMTP

En caso que estés trabajando en local o en VPS, tus correos no se enviarán. Neceistas o instalar un servidor SMTP o configurar PHP para usar uno externo. Una opción es usar un cliente de SMTP que conecte con un proveedor, llevar la funcionaldiad fuera. Con ssmtp lo podemos lograr fácilmente.

Primero lo instalamos.

sudo apt-get install ssmtp

Abrimos la configuración de PHP, php.ini.

sudo nano /etc/php/{versión}/cli/php.ini

Modificando la siguiente línea.

sendmail_path = /usr/sbin/ssmtp -t

Guardamos. Ahora configuraremos ssmtp para que conecte con, por ejemplo, Gmail.

sudo nano /etc/ssmtp/ssmtp.conf

Dentro añadiríamos los datos necesarios de la cuenta.

root=micuenta@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=midomonio.com
hostname=FQDN.yourdomain.com
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=micuenta@gmail.com
AuthPass=micontraseña
FromLineOverride=yes

8-1

Enviar email en HTML

No varía mucho el procedimiento, tan solo hay que indicar en la cabecera del Content-type que admita HTML y añadir MIME-Version.

// Nuestro mensaje debe ser HTML
$mensaje = '
<html>
<head>
  <title>Feliz día del SPAM</title>
</head>
<body>
  <p>¿Qué tal?</p>
  <table>
    <tr>
      <th>Usuario</th>
      <th>Apellido</th>
      <th>Nacimiento</th>
    </tr>
    <tr>
        <td>Barba</td>
        <td>Negra</td>
        <td>1718</td>
    </tr>
  </table>
</body>
</html>
';

// Define que será de tipo será nuestro mensaje: HTML. Y la dirección del emisor.
$headers = [
    'MIME-Version' => '1.0',
    'Content-type' => 'text/html; charset=utf-8',
    'From' => 'curso@php.com'
];

// Lo enviamos
mail('correo@falso.com', 'Día especial', $mensaje, $headers);

Usando plugin PHPMailer

Si necesitamos realizar acciones avanzadas, como indicar la configuración del servidor SMTP o enviar archivos adjuntos, podemos hace uso de PHPMailer. Deberás instalarla en tu proyecto con Composer.

composer require phpmailer/phpmailer

Aquí puedes ver un sencillo ejemplo.

<?php
// Importa
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once('vendor/autoload.php');

// Crea objeto
$mail = new PHPMailer();

try {
    // Configuración servidor SMTP
    $mail->isSMTP();
    $mail->Host       = 'smtp.correo.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'usuario@correo.com';
    $mail->Password   = 'contraseña';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    $mail->setFrom('emisor@correo.es', 'Nombre emisor');
    // Quien lo recibe
    $mail->addAddress('receptor@correo.es', 'Nombre receptor');

    // Contenido
    $mail->isHTML(true);
    $mail->Subject = $subject;
    $mail->Body    = 'HTML de mi mensaje';

    // Enviar
    $mail->send();

} catch (Exception $e) {
    // Errores
    echo $e;
}

8-2

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me invitas a un café? ☕

Puedes hacerlo usando el terminal.

ssh customer@andros.dev -p 5555

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario