Hace un tiempo tuve algunos problemas con la función mail() de PHP y empecé a buscar alternativas. Por suerte los primeros ejemplos que vi fueron de PEAR lo cual me garantizaba no tener que hacer “loco” en el servidor. Auqneu esto puede ser una limitante para algunos alojamientos aunque ya la mayoría de alojamients serios sobre PHP ofrecen la opción (como en cPanel) de bajar paquetes de PEAR desde un panel de control.

Antes de pasar a los ejemplos claro que uno de los dramas con la funcion mail era que los correos no llegaban bien, era fácil cometer un error con los headers o tener que luchar con caracteres raros cuando se convertía de ISO 8859-1 a UTF-8. Asi es que el ejemplo va para enviar correos en HTML y Texto.

require("Mail.php");
require("Mail/mime.php");

# A Quién va el correo
$to="micorreo@midominio.com";

# El asunto / título del mensaje
$subject="Probando correos con PEAR::Mail";

# El mensaje o body en texto
$mensajeTexto="Su cliente de correo electrónico es viejísimo! Actualice para poder ver esto!!!";

# El mensaje con formato en HTML
$mensajeHTML="

Hola, este es un ejemplo de correos con PEAR::Mail

";

# Los headers del correo
$headers=array();
$headers['From']="no-reply@midominio"; # Quien lo manda
$headers['To']=$to; # Aca va el correo que definimos mas arriba
$headers['Subject']=$subject; # El asunto
$headers['X-Mailer']="X-Mailer: Mi Mailer en PHP"; # Si quieren identificar de donde sale
$headers['X-Priority']=3; # La prioridad del correo (1 es importante)
$headers['Errors-To']="webmaster@midominio.com"; # A donde va el correo si sale algo mal
$headers['Return-Path']="no-reply@midominio.com";

# Empieza el baile

$message = new Mail_mime();
$message->setTXTBody($messageTEXT);
$message->setHTMLBody($messageHTML);

# Aca definimos el encoding (esta es la parte de Mail::Mime)

$mimeparams=array();
$mimeparams['text_encoding']="7bit";
$mimeparams['text_charset']="UTF-8";
$mimeparams['html_charset']="UTF-8";

# Metemos todo en el body, Pear se encarga de armarlo
$body = $message->get($mimeparams);

# Cargamos los headers, Pear se encarga del resto...
$headers = $message->headers($headers);

# Enviamos
$smtp = Mail::factory('smtp', array ('host' => "127.0.0.1", 'port'=>25, 'auth' => true, 'username' => "no-reply@midominio.com", 'password' => "mipassword"));

$mail=$smtp->send($to, $headers, $body);

#Controlamos de que no haya problemas
if (PEAR::isError($mail)) {
print "Error";
}else{
print "Correo enviado";
}