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

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;
}
Actividad 1

1. Muestra un cartel avisando que debe aceptar la política de Cookies con un botón.

2. Cuando sea pulsado crea una cookie.

3. No vuelvas a mostrar el cartel mientras exista.

Actividad 2

El visitante debe tener la posibilidad de cambiar el idioma de la página.

  • Crea un botón para actualizar el idioma.
  • Guarda la selección en una cookie.
  • Muestra el texto adecuado dependiendo de la cookie existente. Si quieres en mitad de la página.

ES - Bienvenido

EN - Welcome

IT - Benvenuto

FR - Bienvenue

Pro:

  • Guarda además el color del fondo.
  • Usa banderas.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?