¿Cómo puedo obtener el remitente correcto en PHP con mail()? smtp
Si su sitio web envía correo con la función de PHP mail(), el correo sale sin iniciar sesión. En ese caso, el remitente técnico (Return-Path) suele ser la cuenta del sistema de su paquete y no su propia dirección. Por ello, SPF y DMARC no cuadran bien, el correo acaba con más frecuencia en la carpeta de spam y los mensajes de error llegan a un buzón que nadie revisa.
Por eso, configure su sitio web para que envíe el correo mediante SMTP con inicio de sesión, igual que su programa de correo. Así su propia dirección será el remitente y el correo se tratará como correo normal de su dominio.
Los datos para SMTP
- Servidor: su nombre de dominio (jouwdomein.nl) si su sitio web está alojado en WebOké, o el nombre del servidor de su paquete, como linux2023.webawere.nl. Lo encontrará en Mi WebOké, en Mis productos, en la columna Servidor.
- Puerto: 465 con SSL/TLS, o 587 con STARTTLS.
- Nombre de usuario: la dirección de correo completa de un buzón, preferiblemente un buzón independiente para el sitio web, como website@jouwdomein.nl.
- Contraseña: la contraseña de ese buzón.
Utilice como remitente (From) la dirección de ese buzón, o un reenviador que redirija a él. La dirección de un visitante nunca debe ir en From, sino en Reply-To. De lo contrario, el servidor rechazará el correo o este acabará en la carpeta de spam.
Ejemplo con PHPMailer
Una biblioteca muy utilizada es PHPMailer. Puede instalarla con Composer (composer require phpmailer/phpmailer).
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// SMTP-instellingen
$mail->isSMTP();
$mail->Host = 'jouwdomein.nl';
$mail->Port = 465;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Username = 'website@jouwdomein.nl';
$mail->Password = 'wachtwoord';
$mail->CharSet = 'UTF-8';
// Afzender, antwoordadres en ontvanger
$mail->setFrom('website@jouwdomein.nl', 'Website jouwdomein.nl');
$mail->addReplyTo('bezoeker@example.net');
$mail->addAddress('info@jouwdomein.nl');
// Bericht
$mail->Subject = 'Testbericht';
$mail->Body = 'Dit is een testmail verzonden via SMTP.';
$mail->send();
echo 'E-mail verzonden';
} catch (Exception $e) {
echo 'Versturen mislukt: ' . $mail->ErrorInfo;
}
¿Utiliza WordPress o WooCommerce? En ese caso, puede configurarlo con un plugin de SMTP; consulte Enviar correo desde WordPress y WooCommerce de forma fiable mediante SMTP. Para saber cómo proteger un formulario contra el spam, lea Un formulario de contacto en su sitio web: enviar los campos por correo y evitar el spam.
¿Quiere aprender más? Siga el curso gratuito Correo electrónico en orden, lección 7.3 Correo desde su sitio web y formularios.
¿Quiere aprender más? Siga el curso gratuito de WordPress, lección 9.1 Correo electrónico desde WordPress.
