« »
Feb 04

En el desarrollo de aplicaciones PHP es muy frecuente encontrarse con la necesidad de enviar algún tipo de email: bonitos en HTML a los usuarios, de debug, alertas, etc. Para enviar un correo electrónico en PHP disponemos de varias formas de hacerlo, lo más rápido es con las funciones incorporadas en el mismo lenguaje aunque también disponemos de una gran cantidad de clases y librerías ya hechas, como las PEAR Mail. Como siempre el uso de librerías externas con muchas líneas de código empeoran el rendimiento y mantenimiento de nuestro software. Pero las PEAR Mail son bastante ligeras y, en mi opinión, muy útiles en los casos en que queremos enviar emails “bonitos” con HTML enviando también la versión texto, con attachments, imágenes, vídeos, y demás, así nos olvidamos de tener que gestionar todo lo necesario manualmente (cabeceras, codificaciones, extensiones MIME, etc.). Aunque siempre se ha de valorar el uso que le vamos a dar de lo q ofrece y el número y tipo de emails q necesitamos enviar. A continuación detallo brevemente algunos métodos para enviar distintos tipos de email desde PHP.

Función mail()

Para enviar emails sencillos en modo texto el uso de la función mail() es sin lugar a dudas lo más cómodo. Su uso es el siguiente:

[php] mail(‘direccion@del.destinario.com’,’Asunto’,’Mensaje’); [/php]

Devuelve TRUE en caso de éxito y FALSE en caso contrario. También podemos pasarle cabeceras adicionales como cuarto parámetro, esto puede ser útil, por ejemplo, para enviar mensajes HTML usando mail() pero a la mínima q necesites enviar emails un poco más complejos es recomendable usar las PEAR.

Función error_log()

Para todos aquellos emails de debug o alertas internas de nuestro software podemos usar error_log(). Con esta función podemos hacer log a distintos destinos: el log del sistema, un archivo, la conexión de debug y también enviar por email. Por ejemplo para enviarnos por email información acerca de una exception q nos salta en nuestro código:

[php] try {
// código con posibles errores
} catch (Exception $e) {
$msg = ‘ERROR #’.$e->getCode().”\n”;
$msg .= $e->getMessage().”\n”;
$msg .= print_r($e->getTrace(),true);
@error_log($msg, 1, ‘direccion@del.destinario.com’);
} [/php]

Clase PEAR Mail_mime

Como comentaba esta es una de las clases existentes para el envío de emails con soporte de extensiones MIME, lo que permite enviar HTML con imágenes, vídeo, archivos adjuntos, etc. Este es un ejemplo sencillo de como enviar un email HTML con su versión texto y con un archivo adjunto:

[php] require_once ‘Mail.php’;
require_once ‘Mail/mime.php’;
$destinario = ‘direccion@del.destinario.com’;
$from = ‘direccion@del.from.com’;
$asunto = ‘Asunto del mensaje’;
$mensaje = ‘‘.$asunto.’‘.”\n”;
$mensaje .= ‘

Hola

‘;
$mime = new Mail_mime(“\n”);
$mime->setTXTBody(strip_tags($mensaje));
$mime->setHTMLBody($mensaje);
$mime->addAttachment(‘fichero_adjunto.zip’, ‘application/zip’);
$body = $mime->get();
$hdrs = array(‘From’ => $from, ‘Subject’ => $asunto);
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory(‘mail’);
$res = $mail->send($destinario, $hdrs, $body);
if (PEAR::isError($res)) echo ‘error enviando el email’; [/php]

Todos los métodos anteriormente descritos necesitan de un servidor de correo funcionando y las directivas de configuración del PHP correctamente fijadas. Si tienes un ISP un poco decente casi seguro q no tendrás ningún problema.

Una técnica alternativa a todos estos métodos y que no necesita de servidor de correo es usar sockets (función fsockopen()) para mandar nosotros mismos los mensajes desde nuestro código. Se trata de hacer desde PHP el trabajo q antes nos hacía el servidor. Esto, en general, no es recomendable ya q puede presentar serios problemas d rendimiento y gestión de errores (nunca funcionará mejor nuestro código PHP q un Qmail :) y la única ventaja destacable q presenta, a parte de no necesitar d un servidor d correo, es disponer de un mayor control de lo que pasa cuando se envía el email. Podemos por ejemplo saber en el momento si el servidor del destinatario del correo existe y nos acepta el mensaje, etc… Aunque con los métodos descritos y leyendo los mensajes devueltos por el servidor de correo también puedes saber si todo va bien… como consejo, si tienes un servidor de correo úsalo.

Be Sociable, Share!
Tagged with:

74 Responses to “Envío de emails desde PHP usando varios métodos (PEAR Mail_mime, mail y error_log)”

  1. crashman says:

    Bueno en mi actual proyecto estoy usando para enviar los correos simple la función mail del propia PHP, pero un amigo me ha dicho que está función en ocasiones suele fallar, es cierto? a mi por ahora no me ha fallado, pero no me gustaría que lo hiciera, ya que comprometería al sistema.

  2. Oriol says:

    Con la función mail() utilizas el servidor de correo que tu ISP tenga configurado para el PHP. Es decir, si el servidor de correo está funcionando correctamente no tiene porque fallar.

    Normalmente representa un mayor riesgo realizar el envío vía sockets con PHP. Con la función mail() sólo te puede fallar la conexión con el servidor de correo, usando sockets tienes más posibles fallos.

    La elección también depende de la fiabilidad de tu servidor de correo. (si es tuyo y tu lo controlas, o si es de un tercero, etc.)

  3. amine says:

    hola muy buenas,a mi el problema que tengo es el de los spam,al enviar el correo a hotmail o yahoo,slae con los spam,me puedes ayudar con eso.gracias
    amine
    un saludo

  4. Pardocorp says:

    Excelente ejemplo del uso de la funcion Mail de pear !!! felicitaciones

  5. Oriol says:

    para amine:

    resumiendo mucho, normalmente existen dos principales causas para que tus emails sean tratados como SPAM:

    1) Estás enviando un mensaje con un HTML complejo con imágenes externas, scripts, etc.
    2) La IP del servidor está marcada como spammer en alguna lista negra.

    puedes probar si es el primer motivo enviando un simple mensaje de texto. Para probar lo de la IP envía el mensaje desde otro servidor (o desde tu PC).. La primera tiene solución, se trata de confeccionar un mensaje más simple. Si el problema es la IP tendrás que enviar el email desde otro sitio, no hay más… Si eres una empresa y es un email “bueno” siempre puedes contactar con hotmail y presentarles tu caso (a veces funciona).

  6. nagi says:

    y donde puedo descargar los archivos Mail.php y mime.php por favor

  7. Oriol says:

    Para disponer de estas clases debes tener las PEAR instaladas. Con las últimas versiones del PHP vienen instaladas por defecto, pero si no las tienes consulta http://pear.php.net/manual/en/installation.php para su instalación…
    Dependiendo del sistema operativo con el que trabajes te será más fácil o difícil. Por ejemplo muchas distribuciones Linux y FreeBSD ofrecen paquetes ya preparados para instalar.

  8. hjakam says:

    bueno tengo problemas con la funcion “email”, lei que tenia que instalar un servidor SMTP para php primero y pienso que es por ello que no me finciona, hice un avalidacion si era otro codigo dentro de mi documento pero no erea la funcion email de php ahora toy instalando el servidor no se ue pasara…..

    bye saludos

  9. LeoMM says:

    Gente,
    estoy utilizando la función mail(), pero lo estoy probando sobre apache en mi pc, y como no tengo servidor smtp, me está dando un error.
    Estoy tratando de trapearlo con try/catch pero no me funciona, me muestra igualmente el mismo error:

    El error:
    Warning: mail() [function.mail]: Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in C:\mis_webs\bmn\contratarpublicidad.php on line 27

    Alguien tiene idea de cómo trapearlo, para saber si funciona o no el servicio??

    Gracias!

  10. Oriol says:

    El PHP lleva configurada por defecto la directiva SMTP con “localhost”. Cada vez que intentas enviar un email el PHP se está intentando conectar al puerto 25 de tu PC, y esto es justo lo que te dice el mensaje de error.

    Tiene dos soluciones rápidas para poder usar mail():
    1) instalar un servidor de correo en tu PC. Podrás comprobar que funciona enviando emails con cualquier gestor de correo o ejecutando un telnet contra el puerto 25 de localhost.
    2) otra opción mucho más fácil es configurar la directiva con el nombre de algún servidor SMTP, por ejemplo el de tu proveedor de internet (ISP). Puedes copiar el nombre del servidor del típico “servidor de salida” de cualquier gestor de correo que uses.

    Otra opción es trabajar con sockets desde PHP con lo que podrás mandar emails sin necesidad de un servidor de correo. Puedes pegarle un ojo a Net_SMTP de las PEAR:
    http://www.csh.rit.edu/~jon/projects/pear/Net_SMTP/guide.txt

  11. Elmer says:

    Con este metodo podré enviar mails con formato CSS??

  12. Oriol says:

    Usando las PEAR Mail_mime puedes enviar HTML con CSS incrustado o bien cargar un CSS externo sin problemas

  13. elena says:

    Hola quisiera saber sitengo que usar estas funciones de php para crear una aplicacion que envie mensajes de texto a celulares o telefonos moviles?

  14. Oriol says:

    Pues en principio no pero depende del proveedor de SMS que uses.
    Normalmente para enviar un SMS usas una URL pasándole los parámetros por GET.
    Por ejemplo:
    http://miproveedordesms.com/?num=666123123&msg=mesajedetexto
    Varios proveedores de SMS que he usado siempre funcionaban así… aunque quizás alguno funciona por email. Para realizar las peticiones por GET puedes usar las curl:
    http://www.phpbsd.net/2007/01/31/transfiriendo-datos-con-la-libreria-curl-en-php/

  15. ale says:

    mira , instalo un servidor de correo que tiene el puerto 25 por defecto y tb lo tengo por defecto en el php.ini, pero em da un error el servidor de correo ua k no lo puedo poner en marxa pq me dise que el puerto 25 es tan uso, i por eso mismo no puedo enviar emails……..NECESITO AYUDA POR FAVORR, LO MAS RAPIDO POSIBLE

    G R A C I A S

  16. Oriol says:

    Pues será que tienes algún servicio escuchando en el puerto 25… quizás tienes otro servidor de correo y no lo sabes :)
    Yo probaría de hacer un telnet contra localhost al puerto 25 para ver quien te responde. Normalmente un servidor de correo deja ir un mensaje de bienvenida como:
    $ telnet localhost 25
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 pruebas.net ESMTP

  17. felipe says:

    excelente el contenido

  18. Andres says:

    ORIOL
    Quizas sea tu la solucion a tanta busqueda.
    Soy miembro de un club internacional con varios centenares de miembros por distintos paises. Tenemos un periodico online que queremos distribuir semanalmente, pero el -puerto 25- de nuestro proveedor “Bellsouth” no deja pasar mas de 50 email. Estoy buscando algun programa de envio email que pueda romper esta pared.
    -Tenemos un servidor donde esta nuestra pagina web ?Podemos utilizar esa coneccion que tiene -puerto 23- ?
    -Hay algun programa email que se puede colocar en el servidor y enviar desde alli?.
    Estuvimos viendo empresas que distribuyen email , pero son caros para nuestro presupuesto. ?Conoces alguna en un pais lejano, que al cambio Euro salga bien economico?
    Gracias por tu atencion y profesionalismo
    Andres

  19. Oriol says:

    Algunas posibles soluciones:

    1) Enviar directamente los emails desde PHP en tu servidor web. Puedes escribir algún script con Net_SMTP o googlear, encontrarás varios. Como explico en el post está solución envía los emails directamente desde PHP trabajando con sockets (no es muy recomendable).

    2) Instalar algún soft para enviar emails desde PHP pero que necesita de un servidor de correo, como phplist (www.phplist.com), etc. También hay muchas alternativas (con un google de “newsletter php” tienes para escoger y opensource).

    3) Enviar los emails desde un PC con Linux (o BSD claro) con conexión a Internet. Con cualquier distro Linux tienes un servidor de correo instalado listo para enviar emails. El único inconveniente en estos casos es que a veces las IPs dinámicas de los ISP están marcadas como spammers.

    Si el servidor web lo lleva la misma empresa que el servidor de correo con el límite tendrás que tirar por la última opción. Si no te manejas con sistemas UNIX existen varios programas windows para enviar emails, o sea servidores de correo.

  20. Hernan says:

    Hola
    Me puede indicar donde consigo un servidor de correo que le sirva a este ejmeplo y como hago para configurarlo, la verdad me gustaria que fuera muy claro con su exlicacion ya que no tengo ninguna experiencia sobre esto y es algo que necesito para mi proyecto de fon de carrera.

    Gracias por su atencion y su pronta respuesta..

  21. Oriol says:

    Pues un servidor que sirva para el ejemplo necesita un servidor web como Apache más PHP y con servidor de correo.
    Casi cualquier servicio de hosting ofrece lo necesario y viene configurado correctamente para usar la función mail(). Por ejemplo http://www.hostgator.com/ o http://www.dreamhost.com/.
    En casi todos lo que sí que tendrás que instalar manualmente son las clases PEAR necesarias si es que quieres usar PEAR Mail_mime.
    Si lo que buscas es sólo el servidor de correo… nunca he usado un servicio de sólo email, pero con un google de “mail server service” aparecen algunos, el http://www.authsmtp.com/ no pinta mal.

  22. Hernan says:

    dEPRONTO NO FUI MUY CLARO EN DECIR QUE ES PARA UN SERVICIO LOCAL “INICIALMENTE” QUIERO VER COMO FUNCIONA ESTE EJEMPLO EN MI MAQUINA, ES DECIR QUE MI MAQUINA FUNCIONE COMOS ERVIDOR DE CORREOS.

  23. Oriol says:

    Depende del sistema operativo, ¿Ques SO tienes: Windows, alguna distro Linux, FreBSD ??

  24. Hernan says:

    TENGO WINDOWS, YO ENCNTRE UN SERVIDOR WEB LLAMADO XAMPP,NO SE SI SEA APROPIADO PARA LO QUE QUIERO, SI USTED CONOCE DE ALGUNO LE AGRADECERIA QUE ME LO INDIQUE Y COMO LO CONFIGURO SI LO PUEDE HACER… GRACIAS

  25. Hernan says:

    EXACTAMENTE QUE TENGO QUE HACER PARA PONERLO A FUNCIONAR EN MI MAQUINA QUE TIENE WINDOWS

  26. Oriol says:

    Ok. Con XAMPP tienes Apache con PHP y MySQL pero te falta el servidor de correo. La verdad es que no soy para nada un experto en plataforma Windows.
    En el pasado he configurado varios servidores Exchange http://www.microsoft.com/exchange/ pero es una solución un poco grande (y cara) para este caso. Tienes la versión standard gratuita de http://www.mailenable.com/ o el Mercury Mail Transport System en http://www.pmail.com/. Los he probado en alguna ocasión y que recuerde no tienen complicación en la instalación. Lo único que tendrás que hacer una vez configurado es abrir el puerto 25 del Firewall de Windows y ya deberías poder enviar emails desde PHP. El PHP busca en “localhost” el servidor de correo, en todo caso comprueba la directiva SMTP en el php.ini.

  27. silvina says:

    Hola, alguien sabe como agregar un CCO en este codigo ? gracias…

    “;
    pt_register(‘POST’,’Apellidos’);
    pt_register(‘POST’,’Nombres’);
    pt_register(‘POST’,’Email’);
    pt_register(‘POST’,’Direccioncalleynumero’);
    pt_register(‘POST’,’Localidad’);
    pt_register(‘POST’,’Pais’);
    pt_register(‘POST’,’Codigopostal’);
    pt_register(‘POST’,’Telefono’);
    pt_register(‘POST’,’Profesion’);
    if(!eregi(“^[a-z0-9] ([_\\.-][a-z0-9] )*” .”@”.”([a-z0-9] ([\.-][a-z0-9] )*) “.”\\.[a-z]{2,}”.”$”,$Email)){
    $error.=”E mail invalido”;
    $errors=1;
    }
    if($errors==1) echo $error;
    else{
    $where_form_is=”http”.($HTTP_SERVER_VARS[“HTTPS”]==”on”?”s”:””).”://”.$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),”/”));
    $message=”Apellidos: “.$Apellidos.”
    Nombres: “.$Nombres.”
    E mail: “.$Email.”
    Direccion calle y numero: “.$Direccioncalleynumero.”
    Localidad: “.$Localidad.”
    Pais: “.$Pais.”
    Codigo postal: “.$Codigopostal.”
    Telefono: “.$Telefono.”
    Profesion: “.$Profesion.”
    “;
    $message = stripslashes($message);
    mail(“mail@yahoo.com.ar”,”tema”,$message,”From: $Email”);

    header(“Refresh: 0;url=http://www.web.com.ar/ok.php”);
    ?>

  28. Oriol says:

    Puedes enviar varias cabeceras adicionales separadas por “\r\n” usando el último parámetro de la función mail().

    sustituyes esto:
    $message = stripslashes($message);
    mail("mail@yahoo.com.ar","tema",$message,"From: $Email");

    por esto:
    $message = stripslashes($message);
    $cabeceras = 'From: '. $Email . "\r\n";
    $cabeceras .= 'Bcc: test@example.com' . "\r\n";
    mail("mail@yahoo.com.ar","tema",$message,$cabaceras);

    Cambiando test@example.com por la dirección que quieras.

  29. flak! says:

    hola,
    Estoy tratando de enviar correos desde un sistema casero que estoy haciendo la funcion mail() no me funciona estoy tratando con PEAR Mail_mime pero me saca el siguiente error:

    Warning: main(Mail/mime.php): failed to open stream: No such file or directory in c:\appserv\www\autolavado\mailpear.php on line 9

    Fatal error: main(): Failed opening required ‘Mail/mime.php’ (include_path=’.;c:\php4\pear’) in c:\appserv\www\autolavado\mailpear.php on line 9

    alguien me podria decir como solucionar.
    Gracias de ante mano.!

  30. Oriol says:

    Pues por lo que parece te falta instalar las PEAR Mail_mime. Comprueba si tienes los archivos “Mail.php” y “Mail/mime.php” en tu c:\php4\pear.

    Puedes bajarte lo necesario en:
    http://pear.php.net/package/Mail_Mime/download

  31. ARiel says:

    Hola, necesito hacer un formulario de envio pero para la pagina uqe lo quiero hacer se encuentra en un servidor gratuito con las funciones desactivadas(para evitar el spam) buneo y yo quisiera saber como podria usar el smtp de otro servidor en el que estoy.
    desde ya muhcas gracias.

  32. Carlos says:

    Hola, como puedo enviar mails , solo a usuarios de una intranet, ya intente ennviar y no los envia, en el servidor principal esta el servidor de correos Microsoft Exchange Server, segun ya configure el php.ini donde dice lo siguiente SMTP = nombredemiservidor.nombredeldomiio.local , ¿sera que estoy pasando por alto algo importante?, tengo el apache y php istalado,sera que tengo que instalar un SMTP que no sea de microsoft?

  33. Oriol says:

    para Ariel:

    uuuups, se me ha colado este comentario sin contestar xDD, sorry, como más vale tarde q nunca:

    Para usar otro servidor SMTP con las funciones de email del PHP puedes cambiar la directiva de configuración SMTP, por ejemplo con ini_set(), editando el php.ini o en tu .htaccess.

    Si realmente no tienes disponible la función mail() puedes usar alguna de las clases existentes para trabajar con sockets desde PHP, por ejemplo una que ya he comentado más arriba, la Net_SMTP de las PEAR:
    http://www.csh.rit.edu/~jon/projects/pear/Net_SMTP/guide.txt

  34. Oriol says:

    Para Carlos:

    Pues no, en absoluto se trata de instalar un servidor q no sea de M$, aunque no estaría mal :)

    Comprueba que tienes correctamente configuradas las directivas de configuración del PHP: SMTP con el nombre de tu servidor y smtp_port con un 25.

    Lo q me imagino que puede ser es q tu servidor Exchange no acepte conexiones externas al puerto 25. Puedes comprobar si tienes bien configurado el Exchange haciendo un telnet al puerto 25 desde el servidor Apache PHP… si con telnet puedes el PHP también podrá. Si quieres puedes realizar el telnet desde otro PC de la misma red.

    Otro test alternativo al telnet es probar de enviar un email desde un PC de la red con un programa de correo. Se trata de usar las mismas configuraciones q estás usando en PHP y enviarlo a la misma dirección d correo… si funciona desde PHP te ha de funcionar.

  35. Carlos says:

    Hola Oriol , gracias por tu ayuda, pero lo de telnet no me quedo muy claro, y te dire que si puedo enviar correo de una PC a otra PC en la misma red esto usando Outlook 2003 (no el express), mira mi problema es el siguiente estoy desarollando un sistema en php, para eso instale el XAMPP que me trae php Mysql Apache, lo estoy desarrollando en mi pc que esta en la red local de la empresa que trabajo, pero quiero realizar pruebas de envio de mails a otros usuarios de la misma red por medio de php, por que el sistema que estoy desarrollando asi lo requiere, uso la funcion mail() de php , pero no se si tengo configurado bien el php.ini , por default me trae smtp=localhost pero como no tengo ningun smtp en mi maquina le puse el del servidor principal smtp=nombredemiservidor.nombredeldomiio.local esto no estoy muy seguro si esta bien, pues esto es lo que me aprece cuando configuro una nueva cuenta en el Outlook y me pide el nombre de Microsof Exchange Server, previa comprobacion de que el usuario que estoy configurando su cuenta se encuentra en el domino de la empresa. bueno lo que quiero es mandar correos nada mas internos y que les llegue a al cliente de correo outlook, pero no se si por que estoy realizando las pruebas en una maquina que no tiene privilegios de administrador de la red no me los permite enviar, ¿Alguien podria orientarme?, creo que ando muy perdido sobre estos temas, a lo mejor tengo que hacer las pruebas directamente en el servidor de la empresa, pero implicaria instalar el xampp , espero que alguien pueda ayudarme mucho se lo agradecere

  36. Jgear says:

    Hola.. mira tengo un problemita.. resulta que tengo una lista de email y necesito enviar un correo a cada uno de los email que tengo, el problema radica en que cada correo que envio, contiene información diferente dependiendo el usuario y cuando trato de hacer funcionar mi php solo me envia el correo al primero de la lista, pero no me envia el de los demas…

    tendria alguna idea de por que me sucede eso

  37. Saul Miranda Garcia says:

    Hola Yo quiero enviar un boletin semanal de novedades quiero saber que tanbueno me resultaria usar la funcion (mail) de php.

    o que recomendaciones me podrias hacer gracias

  38. Oriol says:

    Para Jgear:
    Sin ver el código poco te puedo ayudar. Si tienes una lista… pues se trata de hacer un foreach, por ejemplo, e ir construyendo y enviando los distintos emails.

    Para Saul Miranda Garcia:
    Para algo pequeño y/o simple la función email o la clase PEAR Mail_mime son más que suficientes. Si quieres tener un soft mucho más potente (p.e. saber quien lee el boletín, donde clican, envíos a miles de usuarios, etc.) puedes probar http://www.phplist.com/ es realmente bueno.

  39. Ivan marsiglia says:

    hola oriol…. estoy intentando enviar un mail desde una aplicación flash. he probado a través de php y asp utilizando las funciones que se encuentran en la web, pero de ninguna manera he podido lograr que a mi correo llegue el mensaje de prueba que envio desde la aplicación. ya se ha probado utilizando apache y con internet information server y tampoco. si tu tienes un ejemplo o una solución te lo agradeceria me la hicieras saber. de antemano gracias por tu ayuda!

  40. Oriol says:

    pues no soy muy conocedor de flash. Pero sé que puede enviar datos por POST o por GET (haciendo un google de “flash send email php” he visto varios ejemplos que creo te servirán).

    Si el flash es el equivalente al típico formulario HTML puedes recoger los datos desde un script PHP y usando la función mail() enviar el mensaje. p.e.:

    mail($_POST['to'],$_POST['subject'],$_POST['texto']);

    Otra opción si no es un formulario es llamar a una URL y pasar los parámetros necesarios por GET, p.e.:
    http://ejemplo.com/enviar_email.php?to=destino@delmail.com&subject=asunto&texto=mensaje

    y en el PHP:
    mail($_GET['to'],$_GET['subject'],$_GET['texto']);

    Aunque quizás lo primero es un poco de debug y con un echo() comprobar que al PHP le están llegando los datos. Al menos así podrás saber si es un problema de comunicación con el flash o del envío desde PHP.

  41. josehp says:

    hola buenas noches por ahora no tengo mi pag montada en la red, queria saber si era posible hacer pruebas de envios de email utilizando un servidor local, tengo instalado xammp de ser posible quisiera que me explicaran, estoy comenzando en esto, espero una respuesta pronto

  42. Oriol says:

    perdón por la demora, dada tu solicitud de urgencia :)

    La respuesta es sí, puedes realizar pruebas de envío en local. Si tienes un servidor de correo que envía emails correctamente, desde PHP podrás enviar. No es necesario que el script PHP esté ubicado en un dominio registrado, puedes tenerlo en tu PC local tranquilamente.

    El PHP por defecto se espera encontrar el servidor de correo en localhost (en el mismo servidor que ejecuta el PHP), en tu caso parece ser que es así (XAMMP), o sea que te debería funcionar sin problemas sin configurar nada.

  43. Sergi says:

    Buenas,

    estoy intentando usar los códigos del tutorial, usando la clase mime. Según los del hosting la clase está instalada pero a mí no me funciona.

    He hecho pruebas primero con la función Mail a secas, pero no me envía el mail como HTML.

    El problema es que el código se queda en blanco cuando hago el require de la clase mime.

    “require_once ‘Mail/mime.php’;”

    Si pongo un die debajo de esta línea no sale, pero si lo pongo encima del include… el die se ejecuta.

    Eso puede ser que no esté activada en el php.ini??

  44. Oriol says:

    Por lo que comentas se produce un error al intentar incluir la clase. Si los del hosting te dicen que la tienes instalada te podrían decir donde está para poderla usar.

    Seguramente falta incluir el path de las PEAR en el include_path. Quizás te ayude ejecutar un get_include_path() para ver que include_path tienes actualmente y con un set_include_path() añadir el directorio que te falta.

    Si los del hosting no te dan una solución siempre puedes instalarte una copia local de las PEAR en tu cuenta de usuario:
    http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/

  45. Yo tengo un problema y nadie me a podido ayudar u orientar. Quiero montar un servidor web con mi propia pagina, SQL, PHP y un servidor de correo…

    Ahorita lo tengo en windows, con Apache y todo pero no puedo enviar correo entonces si entro a mi sitio y quiero enviar un comentario… este comentario si se guarda en la base pero no me envia el correo… alguna manera facil para solucionar? tengo que aclarar que quiero enviar el correo tanto a la persona que envia el comentario como a mi cuenta personal (ya sea hotmail, gmail u otra gratis de internet)

    Espero alguien me pueda orientar y saludos desde Veracruz.

  46. Warning: Server Error in c:\foxserv\www\contactanos.php on line 66
    Este es el error que me sale en el navegador y no me deja enviar correo, ocupo el mail() con una direccion de hotmail, encabezado, contenido, tengo instalado el programa para servidor de correo http://www.qksoft.com que abre el puerto en windows pero me sigue saliendo eso.

  47. Oriol says:

    Pues el error que me copias no tiene el formato típico de los errores PHP. A no ser que FoxServ cambie esto por defecto, no lo sé.

    En cualquier caso lo primero es identificar quien es el culpable.

    Para probar que tienes un servidor de correo funcionando puedes hacer un telnet al puerto 25 de localhost (tu PC) y ver que responde, aunque una prueba más rápida/fácil es configurar algún cliente de correo local (outlook, etc.) con el servidor saliente (SMTP) en “localhost” y el puerto “25”, si te permite enviar emails, el servidor de correo funciona.

    La función mail() del PHP forma parte del core, si se instala el PHP correctamente no existe la posibilidad de que no puedas usarla, y me imagino que el FoxServ para Windows la lleva correctamente compilada. Verifica que el error lo tienes justo en la linea que intentas enviar el email, no sea que el error te salte por otro lado.

    Si tienes el PHP sin soporte de la función mail() siempre puedes usar funciones de sockets para enviar el email pasando de un servidor de correo:
    http://www.csh.rit.edu/~jon/projects/pear/Net_SMTP/guide.txt

  48. sepul says:

    Maginifico post, pero tengo una situacion complicada, es la de enviar todos los archivos de una carpeta que tengo por ftp. La cuestion seria adjuntar varios archivos a un mismo mail, casi doy con la solución con “X-attachments:”, pero ni repitiendo esto tanta veces como archivos tengo , ni incluyendo las cabeceras los envia. Los recibo todos como un .dat, en vez de verlos de forma individual dentro del mismo correo. Espero puedan ayudarme un abrazo

  49. Christian says:

    Hola como estan, mi problema es que no puedo enviar correos a hotmail usando php con function mail(). alquien porfabor me podria decir con configurar para poder enviar correos.

  50. Oriol says:

    Cristian, me imagino que si dices que no puedes enviar correos a Hotmail es porque a otros destinatarios sí que puedes. Si es así estamos hablando de un problema de SPAM, y más tratándose de Hotmail. En este mismo post Amine nos comentaba el mismo problema y, por si te puede ayudar, mi respuesta.

  51. Laura says:

    Hola, yo tengo un problema al utilizar css en el email que envio, y es que en thunderbird, outlook y outlook express el correo se visualiza perfectamente con los estilos de mi css, pero en hotmail, gmail y yahoo no coge los estilos css. Sabe alguien que se puede hacer??? Gracias

  52. Oriol says:

    Laura, la mejor opción para enviar por email HTML con CSS es incrustar el CSS en el HTML (usando style=”” en los elementos) y para los tamaños de fuentes usar píxeles (por ejemplo 11px). Esta es la mejor forma de conseguir visualizar los mismo ya sea outlook, gmail, yahoo, etc.

  53. Oriol says:

    Para Sepul,

    Para enviar múltiples attachments en un email es necesario trabajar correctamente con la codificación MIME. Debes dividir el mensaje en varias partes separadas por un boundary e indicar correctamente el Content-Type y Content-Disposition. Tienes varios ejemplos en los comentarios de http://es.php.net/manual/es/ref.mail.php

    Aunque lo más cómodo con diferencia es usar la clase PEAR Mail_mime, sólo es necesario llamar al método addAttachment() tantas veces como archivos quieras adjuntar. Siguiendo el código de ejemplo de este post:

    $mime->addAttachment('fichero_adjunto.zip', 'application/zip');
    $mime->addAttachment('fichero_adjunto2.zip', 'application/zip');
    $mime->addAttachment('fichero_adjunto3.zip', 'application/zip');

  54. Saúl says:

    Sólo escribo para felicitarte por tu excelente post, vas directo a mi del.icio.us

  55. Jonathan says:

    Hola, yo también tengo el mismo problema que Laura, y lo que me está pasando es que gmail, hotmail y yahoo se “comen” el style=”” o el id=”” y class=”” … por lo que no me ha servido de nada la maquetación con css… alguna idea que hayan probado?

  56. jose says:

    hola ESTOY TRABAJANDO CON PHP 5 /APPSERVER….
    QUIERO ENVIAR EMAIL NO FUNCIONA NO SE QUE SE TIENE QUE HACER EN PHP.INI O CONFIGURAR EL SMTP SI ALGUIEN SAVE POR LO QUE VEO ORION AYUDARME GRACIAS
    JL_ESPSA10@HOTMAIL.COM PERU-………..

  57. Sergestux says:

    Oye felicidades por el articulo y dejame decirte que me sorprende que leas todas los comentarios y mas aun que los contestes buscando una solucion.

    Sigue asi y estaras ayudando a hacer de este un mundo mejor

  58. Willy says:

    Hola: Como estas? tengo un problemita con la función mail. Tengo un formulario el cual quiero que llegue x mail con formato html (tablas), en la parte superior el monbre del campo divididos en y en otro en la parte inferior el contenido de cada campo. Este formulario posee y ‘file’. El problema es que no me llega el contenido de los campos, me llega la fila superior con sus correspondiente nombre y el formato que yo quiero pero no el contenido, me llega el adjunto, pero no el comentario.
    El código es muy largo y no seria buieno pegarlo aqui. Si me pasas algún mail te lo puedo enviar. Desde ya gracias por tu ayuda. SALU2

  59. Oriol says:

    Hola Willy,

    Pues no acabo de entender tu comentario, me da que te has dejado algunas palabras :) y sin el código todavía menos.

    Pero si dices que te llega la primera fila pero no el contenido ya es mucho, recibes en HTML correctamente, la codificación es la adecuada, etc. Seguramente es debido a algo en el código HTML que envías.

    Si quieres mi email figura en la página de autor:
    http://www.phpbsd.net/autor/

  60. Willy says:

    Te envíe un mail. Pudiste verlo?
    WILLY GRAx

  61. javier says:

    Hola a todos

    Tengo el siguiente inconveniente, estoy enviando email con html con la función nativa de php pero tengo un problema con la codificación del asunto y Outlook, el html lo muestra bien pero los asuntos se tornan inentendibles. Quería preguntarte si esta clase tiene forma de setear la codificación del mensaje y si se suele solucionar estos problemas. Me gustaría tener una afirmación antes de instalas este paquete en el servidor.

    Desde ya muchas gracias

  62. Carlos says:

    Tengo implementada la funcion mail(), en un pequeño formulario de contactenos el problema radica en que no me llegen los correos con el formulario a mis cuentas corporativas, pero si configuro a que me lleguen a cuentas como gmail, yahoo o hotmail si me llegan los correos con lo datos del formulario. El hosting, el dominio y las cuentas estan sobre el servidor de telmex. Podrian ayudarme a solucionar mi problema

  63. david e says:

    hola como estan necesito saber un software que me perimta enviar correo masivo en php y su implementacion

  64. tania says:

    quisiera tener un sitio enmi pagina para que me escriban la gwente comentarios etc…

  65. IVAN AGUILAR says:

    TENGO UNA PEQUEÑA PREGUNTA AMIGOS:

    tengo este fragmento de codigo php

    mail(“ivsoluciones@hotmail.com” , $asunto, $contenido, $headers);

    que resulta bastante bien, pero quisiera saber como ago para agregar mas correos, es decir q el mensaje llegue a dos correos simultaneamente.

    GRACIAS

  66. IVAN AGUILAR says:

    LES AGRADECERIA BASTANTE SI ALGUIEN ME RESPONDE CON UNA AYUDA A MI E-MAIL: ivsoluciones@hotmail.com

  67. carlos says:

    excelente articulo.
    Tengo un problema existencial.
    El codigo me funciona de 10 !
    El problema es que cuando intento abrir el archivo adjunto que recibo como respuesta… no me funciona
    ¿¿¿a alguien le paso esto tambien ????

  68. Germán says:

    Muy bueno los comentarios, soy nuevo y quisiera saber si existe un script para enviar un correo que se pueda incrustar imágenes, comentario y que las imágenes sean como botones o tenga otro boton para derivarlo a un sitio, cuando el destinatario abra y se encuentre con ese material.
    Espero que me puedan ayudar.
    Muchas gracias.

  69. Robinson says:

    No he podido hacer una salidad de mail exitosa, parece ser que el problema esta en el .INI del php, pero la verdad no se que hacer con el servidor? o como se debe configurar de antemano les agradezco!

  70. pabloche says:

    Estoy utilizando la función mail para enviar correo y funciona perfectamente, pero me cuando recibos los correos y los leo desde outlook me pone el nombre del servidor de la máquina.

    Os mando el código,

    $cabecera = “From: comuvecinos.com \r\n”; $para = $HTTP_POST_VARS[“para”];
    $asunto = $HTTP_POST_VARS[“asunto”];
    $mensaje = $HTTP_POST_VARS[“mensaje”];

    mail($para, $asunto, $mensaje, $cabecera);

    Cuando recibo el correo en el origen me pone:

    DE: pabloche@sky.fastbighost.net en nombre de minombre [master@midominio.com]

    Yo quiero que solo salga:

    DE: minombre [master@midominio.com]

    Alquien puede ayudarme

  71. Jano says:

    Hola…
    tengo una pregunta q hacerles….
    uso la funcion mail… envio bien mail masivos…. hasta q en el server pasaron de php 4 a php 5…

    dejo d funcionar…. me dice q envia correctamente.. pero no llega nada a la casilla….

    q puede ser,..
    hay q activar algo…
    q se puede hacer , en este caso…

    salu2

  72. Fernando Canteros says:

    Hola!. Tengo el siguiente problema, quiero imprimir desde el lotus notes, un informe que se construyo con la clase mail_mime, pero se ve mal en la vista previa. Quiero saber si alguien conoce una forma de setear los rangos desde la clase mail_mime?, para lograr una impresión optima. Muchas gracias

  73. ramon says:

    Hola Oriol. Primero debo felicitarte por esta excelente página, y quería tratar de solucionar este problema con tu ayuda.
    Sucede que he instalado un script de zubrag para crear cuentas email en cpanel, funciona super bien, pero por operarlo unas tres veces sin darme cuenta de que faltaban los datos de conexión se ha inutilizado y cuando lo corro devuelve: HTTP 1.1 401 Access denied stil working in…
    Podrías indicarme que es lo que está sucediendo por favor?

  74. Karnaurio says:

    Hola! me canse de tratar de entender el PHP!!! alguien me puede enviar el codigo para un formulario con estos tres campos??? (mi pagina esta en wesped.com) Nombre, Pais, E-mail…

    Gracias!!!!!
    SOlo se un poco de Vbasic!!!

    Mi mail es monticorp_patrich@yahoo.com.ar

Leave a Reply

preload preload preload