¿Cómo consigo el remitente correcto con mail() en PHP? SMTP
Si usa la función mail() de PHP, el remitente será nombredecuenta@sudominio.xx. No se puede cambiar y provocará errores o hará que el correo se considere spam.
Lo mejor es usar SMTP. En internet encontrará muchas clases PHP gratuitas para ello. Así el correo se envía por SMTP y el remitente se puede definir fácilmente.
Una opción muy utilizada es PHPMailer
También es posible enviar correo directamente por SMTP con PEAR Mail. Resulta especialmente útil en formularios o scripts a medida.
https://pear.php.net/package/Mail
https://pear.php.net/package/Net_SMTP
https://pear.php.net/package/Auth_SASL
Ejemplo: enviar correo SMTP con PEAR
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
// Cargar PEAR Mail
require_once 'Mail.php';
// Ajustes SMTP
$smtp_host = 'ssl://mail.server.tld';
$smtp_port = 465;
$smtp_user = 'user@domein.nl';
$smtp_pass = 'contraseña';
// Datos del correo
$to = 'destinatario@domein.nl';
$from = 'user@domein.nl';
$subject = 'Mensaje de prueba';
$body = 'Este es un correo de prueba enviado por SMTP.';
$reply = 'user@domein.nl';
// Cabeceras
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject,
'Reply-To' => $reply
);
// Objeto SMTP
$smtp = Mail::factory('smtp', array(
'host' => $smtp_host,
'port' => $smtp_port,
'auth' => true,
'username' => $smtp_user,
'password' => $smtp_pass
));
// Enviar el correo
$result = $smtp->send($to, $headers, $body);
if (PEAR::isError($result)):
echo $result->getMessage();
else:
echo 'Correo enviado correctamente';
endif;
