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
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;
}
Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.
¿Me invitas a un café? ☕
Puedes hacerlo usando el terminal.
ssh customer@andros.dev -p 5555
Comentarios
Nuevo comentario
Nueva replica {{ formatEllipsisAuthor(replyComment.author) }}
Escribe el primer comentario
{{ comments.length }} comentarios