Foros del Web » Creando para Internet » Flash y Actionscript »

Problema enviando email

Estas en el tema de Problema enviando email en el foro de Flash y Actionscript en Foros del Web. tengo este php para enviar un email: Código PHP: <?php function  quitar ( $mensaje ) {  $mensaje  =  str_replace ( "<" , "&lt;" , $mensaje ...
  #1 (permalink)  
Antiguo 22/01/2006, 17:17
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 19 años, 1 mes
Puntos: 1
Problema enviando email

tengo este php para enviar un email:

Código PHP:
<?php
function quitar($mensaje)

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","\",$mensaje); 
return $mensaje;

function comprobar_email($email){ 
    $mail_correcto = 0; 
    if ((strlen($email) >= 6) && (substr_count($email,"
@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ 
       if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { 
          if (substr_count($email,".")>= 1){ 
             $term_dom = substr(strrchr ($email, '
.),1); 
             if (
strlen($term_dom)>&& strlen($term_dom)<&& (!strstr($term_dom,"@")) ){ 
                
$antes_dom substr($email,0,strlen($email) - strlen($term_dom) - 1); 
                
$caracter_ult substr($antes_dom,strlen($antes_dom)-1,1); 
                if (
$caracter_ult != "@" && $caracter_ult != "."){ 
                   
$mail_correcto 1
                } 
             } 
          } 
       } 
    } 
    if (
$mail_correcto
       return 
1;
    else 
       return 
0;

$comp_email quitar($HTTP_POST_VARS["email"]);
$i comprobar_email($comp_email);
if (
$i != 0)
{
    
$sendTo "[email protected]";
    
$subject $_POST["asunto"];
    
$headers "From: " $_POST["HB-Europe_WEB"];
    
$headers .= "<" $_POST["email"] . ">\r\n";
    
$headers .= "Reply-To: " $_POST["email"]; 
    
$message $_POST["cuerpo"];
    
mail($sendTo$subject$message$headers);
    echo 
"&estatus=OK&";
}
else
{
echo 
"&estatus=email&";
}
?>
Y resulta que lo he probado y me devuelve el OK, es decir que se supone que esto:
Código PHP:
    $sendTo "[email protected]";
    
$subject $_POST["asunto"];
    
$headers "From: " $_POST["HB-Europe_WEB"];
    
$headers .= "<" $_POST["email"] . ">\r\n";
    
$headers .= "Reply-To: " $_POST["email"]; 
    
$message $_POST["cuerpo"];
    
mail($sendTo$subject$message$headers); 
lo ha procesado no? por lo tanto me deberia haber enviado un email a: [email protected] . Pues bien, he mirado a ver si habia llegado el correo y nada... No ha llegado ningun correo Me acuerdo que antes que me pasara esto el sistema me funcionaba bien, cuando puse el codigo para filtrar los emails no validos es cuando empezo a no funcionar

¡Alguna ayuda por favor!

ArgoN
  #2 (permalink)  
Antiguo 22/01/2006, 19:05
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Me parece que el problema está en esta línea.

Código PHP:
$mensaje str_replace("\\\\","\",$mensaje); 
Fijate como colorea el código, como si hubiera unas comillas abiertas... que parece ser precisamente lo que está pasando. Al hacer \", estás escapando las comillas, o sea que no se cierran. Probá con:

Código PHP:
$mensaje str_replace("\\\\","\"",$mensaje); 
o tal vez con

Código PHP:
$mensaje str_replace("\\\\","\\",$mensaje); 
Al menos ahora no da error. (El anterior decía "unexpectede simbol @" o algo por el estilo). En fin, habría que ver qué es lo que hay que reemplazar concretamente, pero la anterior versión dejaba las comillas abiertas.

Suerte

Última edición por califa010; 22/01/2006 a las 19:12
  #3 (permalink)  
Antiguo 22/01/2006, 19:58
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 19 años, 1 mes
Puntos: 1
Hmm ! ya me fije en los colores pero lo pase por alto. Lo mas sorprendente es que en mi host de la web el php no envia el email mientras que en otro host si lo hace.
Respecto a lo que decias que no estaban bien cerradas las comillas creo que se debe a que este foro ciertas combinaciones de simbolos las reemplaza por otras. Me explico, voy a poner el mismo codigo de la funcion quitar, ahora poniendo un espacio por enmedio:

Código PHP:
function quitar($mensaje)

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","& #92;",$mensaje); 
return 
$mensaje;

En donde pone: & #92; es lo que el foro reeemplaza por \ (le puse un espacio enmedio) asi que ahi no esta el problema
Mas concretamente, entrando en el codigo AS, lo que tengo es lo siguiente:

Version 1:
Código:
envio_lv.sendAndLoad("http://www.hb-europe.com/flash/email.php", recibir_lv, "POST");
ó:

Version 2:
Código:
envio_lv.sendAndLoad("http://www.svl.hammer.cl/email.php", recibir_lv, "POST");
Con la version 1 NO funciona y con la version 2 SI que funciona. Que curioso no?

Viendo que el mismo php en otro servidor funciona a la perfeccion pero en mi servidor no funciona creo que el problema se debe:
1) a permisos
2) a mi servidor

Saludos y gracias por ayudarme,

ArgoN

Última edición por -=ArgoN=-; 22/01/2006 a las 20:14
  #4 (permalink)  
Antiguo 22/01/2006, 22:00
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Sin ser un experto, estoy seguro de que las comillas están quedando abiertas en la versión original.

La barra invertida "\" es el caracter de escape. Le dice al intérprete de php que lo que sigue lo tome "como viene", es decir, que no lo interprete como código. Si escribieras, por ejemplo:

Código PHP:
<?php 
echo "hola \"pepe\"";
?>
Te mostraría por pantalla:

hola "pepe".

Si pusieras, en cambio:
Código PHP:
<?php 
echo "hola "pepe"";
?>
La salida sería:

Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in

Por la sencilla razón de que las segundas comillas se interpretan como código y por eso están cerrando el string/cadena en un lugar no previsto.

Otro ejemplo que tengo a mano: cuando hay que referenciar una ruta absoluta y php está instalado sobre windows, se escribe:

Código PHP:
include("C:\\Apache\\www"); 
y no

Código PHP:
include("C:\Apache\www"); 
porque el segundo te daría: C:Apachewww en lugar de C:\Apache\www.

Dicho esto, si probás el script desde un navegador (que es muy recomendable hasta ver que funcione ok si estás usando flash, que te deja "a ciegas"), vas a ver que te va a dar un error (lógicamente, si los errores están activados).

Y, además, hice una comprobación extra con el debugger de Zend Studio y es así, nomás: las comillas no están cerradas, por eso da el error cuando llega a la parte de "@".

Así que, me parece que lo mejor que podés hacer es revisar ese punto y probar el script desde un navegador hasta que obtengas los resultados que buscás. De otra manera, te arriesgás a que a veces/en algunos servidores ande y a veces/en otros servidores, no.

(Entre paréntesis, para colorear la sintaxis este foro (y tantos otros) usan una función nativa de php llamada highlight_sting(), que aplica a lo que va entre ; no creo que esta función te esté "engañando").

Suerte
  #5 (permalink)  
Antiguo 23/01/2006, 14:58
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 19 años, 1 mes
Puntos: 1
De acuerdo

Bueno, para salir de dudas voy a poner el archivo .php para poder descargar, asi puedes comprobar si estan abiertas o si no estan abiertas las comillas.

Si estan abiertas hay que avisar al foro de cristalab que corrija ese error.
Un saludo y gracias por tu aporte

email.php

ArgoN
  #6 (permalink)  
Antiguo 23/01/2006, 17:06
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Acabo de ver el código y recién ahora entiendo lo que estabas diciendo (tenías razón!)... Bueno, no te entendí, pero ahora veo a qué te referías con lo de los cambios de símbolos. Conclusión: el código no tiene errores.

Ahora, por qué anda en un servidor y no en otro, francamente no lo sé. Bueno, lamento haberte embrollado con las barras, que en todo esto no tenían nada que ver, las pobres.

Hasta ahora yo nunca tuve problemas para mandar mails, así que nunca investigué mucho sobre el tema (en mi experiencia, nada mejor que los "bugs" para aprender cosas que de otra forma nunca aprenderías). Pero tal vez en el foro de php a alguien le haya pasado algo parecido y pueda orientarte.

Saludos
Califa
  #7 (permalink)  
Antiguo 23/01/2006, 17:28
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 19 años, 1 mes
Puntos: 1
Gracias de todos modos, de paso he aprendido que significa y para que sirve una barra invertida (\) en php Preguntare en el foro de php a ver si hay suerte,

Saludos,

ArgoN
  #8 (permalink)  
Antiguo 23/01/2006, 18:03
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Buenísimo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:03.