Pestañas

sábado, 10 de abril de 2010

Clase PHPMailer para el envío de correos a través de un SMTP en Hosting 1and1

  • Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.1and1.es:25 (Connection refused) in (…) on line 100
  • Language string failed to load: connect_host

Estos errores me quitaron el sueño durante un tiempo.

Normalmente los hosting en los que he trabajado han sido los de arsys.es y en el servidor dedicado que tiene la empresa para la que trabajo, pero nunca había hecho una web para subirla a un hosting de 1&1. Asique, aquí empezaron mis dolores de cabeza y mi insomnio…(jeje). Por supuesto, muchas cosas son distintas, pero lo que más me costó solucionar fue que el formulario de contacta de la web, que se gestiona con la librería PHPMailer, funcionara!!!!


No me lo podía creer, la mejor clase del mundo (a mi punto de vista) para el envío de correo con php y smtp, y me daba unos errores ilógicos!! Después de probar un montón de cosas (distintos servidores smtp, distintos puertos de smtp…) y después de leerme otro tanto de post sobre esta librería, por si estaba cometiendo algún error, pues lo daba por hecho, di con mi salvación, Webolio.

Parece ser que en 1&1, la plataforma que gestiona el envío de corros por smtp (sendmail) se encuentra en la ubicación predeterminada (/usr/sbin/sendmail/), por lo que no se requiere ningún cambio en la configuración.

Y el problema se resuelve únicamente remplazando esta línea:

$mail->isSmtp(); por $mail->isSendMail();

Conclusión: 1and1 probablemente tiene cerrados los puertos smtp saliente en sus servidores de alojamiento compartido. Por lo tanto, si trabajas con servidores 1&1 y necesitas utilizar la librería PHPMailer, no utilices el modo smtp nunca más.

Os dejo un ejemplo completo de cómo quedaría el codigo

include($url_de_la_clase."class.phpmailer.php");

$de = “info@midominio.es”;
$de_cc = "Web midominio.es";
$dir_destino = $_POST[“email”];;
$asunto = "Email de contacto";
$contenido = "Ejemplo de un envío de correo con un servidor 1&1";

//creo el objeto phpmailer(); que es el que va a enviar el correo
$mail = new phpmailer();
$mail -> From = $de;
$mail -> FromName = $de_cc;
$mail -> AddAddress ($dir_destino);
$mail -> Subject = $asunto;

//si hubiera archives adjuntos
if(isset($_FILES["archivo"]))
{
$tmp_name = $_FILES["archivo"]["tmp_name"];
$name = $_FILES["archivo"]["name"];
$archivo_size = $_FILES['archivo']['size'];
$contenido .= "Archivo Adjunto: ".$name;
$mail -> AddAttachment ($tmp_name, $name);
}
$mail -> Body = $contenido;
$mail -> IsHTML (true);
$mail -> isSendMail(); //esta es la línea que hace que funcione el correo con servidores 1&1.
if (!$mail -> Send ())
echo ”ERROR al enviar el correo: ”. $mail->ErrorInfo;
else
echo “Correo enviado correctamente.”;

28 comentarios:

Anónimo dijo...

Muchísimas gracias, cuando ya no sabía que hacer, encontre tu post!!

Anónimo dijo...

Hola, seria posible ver un sencillo codigo?
me propongo colgar una web en 1&1 y no tengo claro el php para phpmail

Anónimo dijo...

no te conozco de nada... pero TE I LOVE YOU!!

MIL MILLONES DE MILLONES DE INFINITAS GRACIAS!!

Llevaba en mi casa sin salir llorando 4 días con sus 4 noches por culpa de eso...

TE AMO q lo sepas!

Anónimo dijo...

Muchas gracias, eres un crack. Llevo casi una hora buscando la solución y en los foros sólo respondían con tonterías... hasta que encontré esta entrada.

Anónimo dijo...

Mil gracias, estaba pasando por lo mismo... Un saludo!

German dijo...

Pues yo no consigo hacerlo andar. Me indica que se ha enviado el email correctamente pero no recibo nunca nada jejeje

Wiinigo dijo...

Gracias por el post.
Estoy montando una web en 1and1 y la verdad es que me has ahorrado muchos dolores de cabeza.
Por cierto, ¿qué te parece 1and1 como hosting?

Muchas gracias por todo.

zenobria dijo...

Hola a todos!! y gracias por dejar vuestros comentarios!!
Wiinigo, 1and1 como host si lo que quieres es tener una pagina con lo básico, (es decir, una sección home, quienes somos, y cuarto historias más), pues no está mal, pero donde esten los servidores dedicados, que se quiten los compartidos!! porque siempre tarde o temprano acabas perdiendo mucho tiempo hasta que solucionas las cosas más secillas...., como es el caso de este post! aunque puestos a escoger servidores compartidos: me quedo con arsys (pero es más caro).

Y German, revisa que tanto la dirección de correo del remitente como la del destinatario esten bien escritas, ya que PHPMailer no te da nigún error y encima parece que todo funciona bien!! como te comas una letra no te llegan!

Anónimo dijo...

estos son mis problems que hago....

Warning: include(phpmailer/class.phpmailer.php) [function.include]: failed to open stream: No such file or directory in /home/villadui/public_html/mailphp.php on line 2

Warning: include(phpmailer/class.phpmailer.php) [function.include]: failed to open stream: No such file or directory in /home/villadui/public_html/mailphp.php on line 2

Warning: include() [function.include]: Failed opening 'phpmailer/class.phpmailer.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/villadui/public_html/mailphp.php on line 2

Fatal error: Call to a member function IsSMTP() on a non-object in /home/villadui/public_html/mailphp.php on line 4


gracias por tu pasciencia.

zenobria dijo...

Hola Giovana, creo que no le estas indicando bien dónde está el archivo "class.phpmailer.php", tienes que decirle la ruta relativa a donde estas ejecutando tu script, es decir, si estas trabajando en raíz, debes decirle todas las carpetas en las que debes entrar, y si estan en una carpeta tienes que salir de ella con '../' para indicarle donde esta esactamente.
una vez echo esto seguro que se te soluciona el "Fatal error" que te está dando.

Anónimo dijo...

Hola,
estoy probando el código que pones y resulta que me dice:

Could not execute: /usr/sbin/sendmail ERROR al enviar el correo: Could not execute: /usr/sbin/sendmail

¿Ha cambiado algo en los servidores 1and1.es en los últimos tiempos?
Recuerdo que hice esta misma prueba hace unos meses y me funcionaba :-(

Pablo dijo...

Muchas Gracias por tu ayuda!!

inercia dijo...

Muchisimas Gracias.....

Paquito dijo...

otro mas que pudes sumar a la lista de los que has salvado la vida. bsos

Miguel dijo...

eres un crack, me has salvado la vida gracias! ;)

Anónimo dijo...

eres un máquina muchísimas gracias por compartir la solución tenia el mismo problema y tu solución funciona a la perfección. xD

Iván Meléndez dijo...

Muchas gracias por tu tip!!

Me ha funcionado perfectamente!!!1

Anónimo dijo...

tengo miweb alojada en 1and1 y en mi maquina la realise con komposer al editar mi formulario no me envia el mismo me sale la informacion del archivo mail.php que esta escrito en la etiqueta accion del formulario en html si alguien me puede alludar se los agradeseria llevo buscando el herror hase mucho tiempo he cambiado el formulario y siempre igual o en otros casos error 404.
soy nuevo en esto de la programacion

muchas gracias de antemano

Pablo dijo...

Gracias por compartir la respuesta!, ya me estaba empezando a desesperar ;)

Enrique dijo...

interesante oyes me podrias ayudar? mira cree un formulario con archivos adjuntos y lo probe en mi servicio de hosting de mi web personal y funciona perfectamente pero en el de mi cliente, no funciona me sale este error

Language string failed to load: execute/usr/sbin/sendmail

idmamen dijo...

Muchísimas gracias,si no fuera pos estos post a veces no habría forma de dar con la tecla.
Yo es también la primera vez que programo para 1and1, pero, como dices, donde se ponga un servidor dedicado no se pone otro... uno tras otro problemas...
Yo suelo trabajar con Hostitec, a traves de Aparcaweb, no me ha dado nunca problemas, aunque eso si, si preguntas en hostitec algo no tienen mucha idea que digamos.... y baratito.
Muchas gracias de nuevo.

Anónimo dijo...

muchas gracias, de verdad ;)

Juan Ortiz Zaforas dijo...

Muchas, muchas, muchas gracias

Anónimo dijo...

Te quiero xavalllllllllllllll eres un P__O CRACKKK!!!, mi vida era un infierno hasta que llegue a este post, son los post como este los que demuestran que compartir los conocimientos es lo que nos hace a todos mas grandes y TU TE SALES!!!. Muchas gracias este problema ha vuelto loco a mucha gente por lo que veo. Te agrego a "Favoritos" forever and ever jejejej. ;).

Anónimo dijo...

Uys perdon, estaba tan emocionado que no me di cuenta que eras xavala :P. Lo dicho Muchisimas Gracias, Eres Muy Grande!!.

P.D. era el de antes.

paxarin dijo...

Muchas gracias por este pequeño pero gran post.
Acaba de llamar a soporte de 1and1 y me decian que lo sentian pero que no se podia que los puertos estaban cerrados y mira por donde...ya estoy recibiendo correo.
De verdad muchas gracias

Anónimo dijo...

Te quiero xDDD Me has salvado la vida

Anónimo dijo...

Boss!!

Publicar un comentario