PHP - Problemas Envío de mail con PHPMailer

 
Vista:
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por Weasel (4 intervenciones) el 04/04/2014 04:09:55
Hola a tod@s, soy nuevo en esta comunidad y tengo muy, muy verde el tema de PHP...a ver si me podéis ayudar...
Estoy intentando enviar mails a través de PHP pero no hay manera de que me salgan las cosas bien. He probado, buscado y combinado todos los tutoriales que he encontrado pero no hay manera. Por eso he acabado aquí, y sí, he buscado en el foro y hay gente que tiene problemas similares al mío, pero sus soluciones parecen no servirme a mi. Así que os expongo mi problema a ver si me ayudáis a ver la luz...Para dar un poco más de info, diré que trabajo con Debian Wheezy y Apache.
La intención inicial era la de crearme una página en html (con el que me manejo mejor), o directamente en php con sus formularios para los destinatarios, el asunto, el cuerpo del mensaje...Pero al ver que no me funcionaba, lo aparqué y me dediqué primero a comprobar si con scripts simples con la función mail() llegaban a buen puerto. Y los mensajes no llegaban. Probé configurando el php.ini de la ruta /etc/php5/apache2/php.ini, vi que este archivo se encontraba también en otra ruta (/etc/php5/cli/php.ini), también lo modifiqué. Instalé sendmail que, por cierto, no sé si hay que configurarlo o no, si es que si no sé cómo, abrí el puerto 25 del router...He probado mil historias y nada. Entonces vi que existía PHPMailer. Súper fácil de configurar y de utilizar...Pues a mi no me va!! Tengo las clases descargadas e incluyo la clase phpmailer.php. Mi php vendría ser este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?
require "includes/class.phpmailer.php";
$mail = new phpmailer();
 
$mail->PluginDir = "includes/";
 
$mail->Mailer = "smtp";
 
$mail->Host = "smtp.gmail.com";
 
$mail->SMTPAuth = true;
 
$mail->Username = "***********@gmail.com";
 
$mail->Password = "***********";
 
$mail->From = "********@gmail.com";
 
$mail->FromName = "Weasel";
 
$mail->Timeout=30;
 
$mail->AddAddress("***********@yahoo.es");
 
$mail->Subject = "Prueba de phpmailer";
 
$mail->Body = "<b>Mensaje de prueba en formato html</b>";
 
$mail->AltBody = "Mensaje de prueba en formato solo texto";
 
$exito = $mail->Send();
 
$intentos=1;
 
while ((!$exito) && ($intentos < 5)) { 	sleep(5);
 
//echo $mail->ErrorInfo;
 
$exito = $mail->Send();
 
$intentos=$intentos+1;
 
}
 
if(!$exito) {
 
echo "Problemas enviando correo electrónico a ".$valor;
 
echo "<br/>".$mail->ErrorInfo;
 
}
 
else {
 
echo "Mensaje enviado correctamente";  }  ?>


Este es uno de muchos códigos de los que he probado, evidentemente no es el mas sencillo, pero es el que más se adaptaba a lo que yo quería. El tema es que cuando le solicito la clase, se me abre la página de github del archivo class.phpmailer.php, pero en local...No creo que se tenga que cambiar nada de ese archivo,no?. Como vi que no progresaba, leí no sé dónde que se podía ver si el puerto 25 estaba operativo o no con telnet. Hice telnet al localhost 25 y la respuesta, para mi sorpresa fué ésta:

~# telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Y me pasa lo mismo con el puerto 21 y el 22...y supongo que con todos los demás también...

Ya no sé por dónde tirar para solucionar esta historia, poder mandar mis mails con php y ser feliz porque todo funciona bien...A ver si a alguien se le ocurre cuál puede ser la solución a mi problema.

Saludos y gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problemas Envío de mail con PHPMailer

Publicado por xve (6935 intervenciones) el 04/04/2014 12:56:56
Hola Weasel, puede ser que tengas mal el host y el puerto?

Creo que tendrías que poner de host: ssl://smtp.gmail.com
y de puerto: 465

Puedes probarlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por Weasel (4 intervenciones) el 05/04/2014 04:02:53
Gracias por la ayuda xve, pero sigue sin funcionar, aunque ahora, al ponerle el puerto ( $mail->Port = 465) y cambiando el host a ssl://smtp.gmail.com, se me queda la pantalla en blanco y no me devuelve ningún mensaje de confirmación ni de error...No lo entiendo. Un colega me ha comentado que no lo conseguiré nunca si no instalo un servidor de correo, pero yo tenía entendido que con sendmail y PHPMailer ya se puede hacer...No sé...ahora mismo me siento súper perdido...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por anonymous (33 intervenciones) el 05/04/2014 04:48:29
si se puede, yo ya he podido hacerlo de la siguiente manera.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
require"class.phpmailer.php";    //coloca la ruta donde tengas la clase phpmailer
 
$mail = new PHPMailer();
 
$mail->IsSMTP();    //Definir que vamos a usar SMTP
 
$mail->SMTPDebug = 0;  //Esto es para activar el modo depuración. En entorno de pruebas lo mejor es 2, en producción siempre 0
 
$mail->Host = 'smtp.gmail.com';  //definimos gmail como servidor
 
$mail->Port = 587;   //El puerto será el 587 ya que usamos encriptación TLS
 
$mail->SMTPSecure = 'tls';   //Definimos la seguridad como TLS
 
$mail->SMTPAuth = true;   //Tenemos que usar gmail autenticados, así que esto a TRUE
 
$mail->Username = "tucuenta@gmail.com";
 
$mail->Password = "contraseña de tu cuenta";
 
$mail->SetFrom('tucuenta@gmail.com', 'tu nombre (este es opcional)');
 
$mail->AddAddress("corredelusuario@hotmail.com");   //hotmail, yahoo, etc.
 
$mail->IsHTML(true);   //Con esto le decimos que enviaremos el mensaje con formato html.
 
$mail->Subject = 'prueba.';   //asunto del mensaje
 
//variable que almacena el mensaje en formato html
$cuerpo = '<html>
</head>
<title>Mensaje</title>
</head>
<body>
<p>a qui tu mensaje!!!</p>
</body>
</html>';
$mail->Body = $cuerpo;    //pasamos la variable donde guardamos el menasje
$mail->Send();     //enviamos el mensaje

te paso este codigo para que te orientes, por que en verdad, a mi me funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por Weasel (4 intervenciones) el 05/04/2014 06:07:55
Woooooooooooooo!!!Perfecto! Ya me funciona!! Creo que el problema estaba en que en la carpeta "includes" sólo tenía las clases. Me he bajado todo el zip de PHPMailer y ya funciona. Gracias por la ayuda Alejandro, pillo un par de cosas de tu script que me han venido bien!!
Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por juan pablo (9 intervenciones) el 23/02/2015 22:35:59
hola weasel, tengo el mismo problema no puedo enviar a traves de la cuenta de gmail, tu dices que es que faltan incluir archivos del phpmailer?esto es lo que tengo yo class.phpmailer.php , class.phpmailer.php.old y class.smtp.php ... vengo dias sin poder lograrlo, hay que hacer alguna configuracion en el correo?lo que hice fue activar acceso a aplicacion poco seguras..te dejo la funcion que tengo modificado con la de arriba que te anduvo,desde ya gracias si es que leen je:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function Enviar_Correo_ticket($datos)   {
 
	$titulo="[#".$datos[ticket][id_tickets_hash]."] : ".$datos[ticket][asunto_tickets] ;
 
	$para=$datos['para'];
	$para_nombre=$datos['para_nombre'];
 
 
		$mail = new PHPMailer();
		$mail = new PHPMailer(); $mail->IsSMTP();
		//Definir que vamos a usar SMTP
		 $mail->SMTPDebug = 0;
		//Esto es para activar el modo depuración. En entorno de pruebas lo mejor es 2, en producción siempre 0 
		$mail->Host = 'smtp.gmail.com';
		//definimos gmail como servidor 
		$mail->Port = 587;
		//El puerto será el 587 ya que usamos encriptación TLS 
		$mail->SMTPSecure = 'tls';
		//Definimos la seguridad como TLS 
		$mail->SMTPAuth = true;
		//Tenemos que usar gmail autenticados, así que esto a TRUE 
		$mail->Username = "xxx@gmail.com";
		$mail->Password = "xxx";
		$mail->SetFrom('xxx@gmail.com', 'prueba tecmanager');
		$mail->AddAddress($para);
		//hotmail, yahoo, etc. 
		$mail->IsHTML(true);
		//Con esto le decimos que enviaremos el mensaje con formato html. 
		$mail->Subject = 'prueba tecmanager.';
		//asunto del mensaje
		// $headers="X-Gen: System";
		// $mail->AddCustomHeader($headers); 
		if ($datos[ticket][prioridad_tickets]==2) $mail->Priority=5;
		if ($datos[ticket][prioridad_tickets]==1) $mail->Priority=1;
		if ($datos[ticket][prioridad_tickets]==0) $mail->Priority=3;
 
    	$id_msg=$datos['msg_id'];
    	$mail->MessageID = $id_msg;
 
	    if(!$mail->Send()){
	    	echo $mail->ErrorInfo;
	    	print_r($mail->smtp->error);
	        return false;
	    }
		$mail->ClearAddresses();
		return true;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por Weasel (4 intervenciones) el 24/02/2015 12:40:14
Hola Juan Pablo. La verdad es que hace tiempo que hice esto y no me acuerdo muy bien, tendría que sentarme a repasar todo lo que hice y no tengo tiempo pero, así de entrada, te puedo decir que te mires bien el segundo post (el de xve) y cambiest el host y el puerto a los que comenta él, a ver si así te funciona. Siento no poder ser de más ayuda.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por juan pablo (9 intervenciones) el 24/02/2015 17:52:20
no hay drama, gracias por contestar de todos modos muy amable de tu parte,saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas Envío de mail con PHPMailer

Publicado por juan pablo (9 intervenciones) el 24/02/2015 16:48:36
hola tengo el mismo problema de no poder enviar correo por gmail, probe con tu codigo y tp sucede, que archivos de phpmailer incluis? yo solo class.phpmailer.php tengo la siguiente funcion estaba andando para un servidor smtp pero quise implementarlo para gmail y no funciona, alguna ayuda?el codigo que tengo es
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//defino las constantes
/*DATOS DE CONFIG MAILING*/
define("_MAIL_SMTP_HOST","smtp.gmail.com");
define("_MAIL_SMTP_SECURE","tls");
 
define("_MAIL_SMTP_PORT","587");
 
define("_MAIL_SMTP_USER","mail@gmail.com");
define("_MAIL_SMTP_PASS","pass");
define("_MAIL_SMTP_FROM","mail@gmail.com");
define("_MAIL_SMTP_FROMNAME","[MKE Solutions] | TM Soporte Juan Pablo |");
 
//lo siguiente es la funcion
function Enviar_Correo_ticket($datos)   {
 
	$titulo="[#".$datos[ticket][id_tickets_hash]."] : ".$datos[ticket][asunto_tickets] ;
 
	$para=$datos['para'];
	$para_nombre=$datos['para_nombre'];
 
	// $para="elmaxi@gmail.com";
	// $para_nombre="Maxi";	
		$mail = new PHPMailer();
		$mail = new PHPMailer(); $mail->IsSMTP();
		//Definir que vamos a usar SMTP
		$mail->SMTPDebug = 0;
		//Esto es para activar el modo depuración. En entorno de pruebas lo mejor es 2, en producción siempre 0 
		$mail->Host = _MAIL_SMTP_HOST;
		//definimos gmail como servidor 
		$mail->Port =_MAIL_SMTP_PORT;
		//El puerto será el 587 ya que usamos encriptación TLS 
		$mail->SMTPSecure =_MAIL_SMTP_SECURE;
		//Definimos la seguridad como TLS 
		$mail->SMTPAuth = true;
		//Tenemos que usar gmail autenticados, así que esto a TRUE 
		$mail->Username = _MAIL_SMTP_USER; // usuario
		$mail->Password = _MAIL_SMTP_PASS; // contraseña
		$mail->From = 	_MAIL_SMTP_FROM;
		$mail->FromName = _MAIL_SMTP_FROMNAME;
		//$mail->SetFrom('jpaschiavitest@gmail.com', 'prueba tecmanager'); 
		$mail->AddAddress($para);
		//hotmail, yahoo, etc. 
		$mail->IsHTML(true);
		//Con esto le decimos que enviaremos el mensaje con formato html. 
		$mail->Subject = 'prueba tecmanager.';
			$mail->AddAddress($para,$para_nombre);
		$body=$datos['msg_body'];
		$mail->Body = $body;
		//asunto del mensaje
		// $headers="X-Gen: System";
		// $mail->AddCustomHeader($headers); 
		if ($datos[ticket][prioridad_tickets]==2) $mail->Priority=5;
		if ($datos[ticket][prioridad_tickets]==1) $mail->Priority=1;
		if ($datos[ticket][prioridad_tickets]==0) $mail->Priority=3;
 
    	$id_msg=$datos['msg_id'];
    	$mail->MessageID = $id_msg;
 
	    if(!$mail->Send()){
	    	echo $mail->ErrorInfo;
	    	print_r($mail->smtp->error);
	        return false;
	    }
		$mail->ClearAddresses();
		return true;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar