Foros del Web » Programando para Internet » PHP »

Esquizofrenia con mail

Estas en el tema de Esquizofrenia con mail en el foro de PHP en Foros del Web. Hola a todos/todas: Buenos dias. Escribo aquí poruqe tengo un problema que me ha surgido al intentar enviar ficheros adjuntos con php mail (que se ...
  #1 (permalink)  
Antiguo 31/07/2011, 06:31
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 12 años, 2 meses
Puntos: 4
Esquizofrenia con mail

Hola a todos/todas:

Buenos dias. Escribo aquí poruqe tengo un problema que me ha surgido al intentar enviar ficheros adjuntos con php mail (que se puede, lo se, lo he visto).
La cosa es que investigando por aquí y por allá he obtenido este engendro:

Código PHP:
<?php session_start ();
//Compruebo errores
error_reporting(E_ALL & ~E_NOTICE); 
ini_set("display_errors"1);


//Hay más código antes pero no tiene que ver con el tema        
        //Compruebo el tipo de fichero 

        
$mime_archivo=($_FILES['uploaded']['type']);  
        
$mimes_aceptados=array('application/vnd.ms-excel','application/vnd.ms-powerpoint','application/pdf','application/msword','application/zip','application/rar');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
            {echo 
"<script type=\"text/javascript\">alert(\"El fichero no está en el formato adecuado solo se admite Excel, Word, PDF, compresión ZIP y Compresión RAR\");   
            window.history.back();  
            </script>"
;  
            exit;}  

    
//Compruebo el tamaño del fichero  

            
if($_FILES['uploaded']['size']>5000000
            {echo 
"<script type=\"text/javascript\">alert(\"El tamaño no es correcto deber ser inferior a 2MB\");  
            window.history.back();  
            </script>"
;  
            exit;}  

//Compruebo que no se produzcan errores  

            
if($_FILES['uploaded']['error']!=0
            {echo 
"<script type=\"text/javascript\">alert(\"Error al copiar el archivo\");  
            window.history.back();  
            </script>"
;  
            exit; }  

//nombre del archivo

        
$archivo$_FILES['uploaded'][name];
    
//Generamos un número aleatorio para concatenar con el nombre de archivo y obtener un nombre único

         
$Prefijo =substr(md5(uniqid(rand())),0,6);; 

//defino donde guardo los archivos

        
$rutaDoc "../uploads/".$Prefijo."_".$archivo;  
    
            if(!
copy($_FILES['uploaded']['tmp_name'],$rutaDoc)) 
            {echo 
"<script type=\"text/javascript\">alert(\"Error al copiar el archivo\");  
            window.history.back();  
            </script>"
;   
            exit;}   
        
//Guardo el fichero

        // creo query para tabla Documentos

        
$queryDOC "INSERT INTO documentos (idEMP,idPER,RutaDoc) VALUES ('$PKPER','$idEMP','$rutaDoc')";
         
        
// ejecuto query para tabla Documentos

        
$resultDOC mysql_query($queryDOC) or die ("Error in query: $queryDOC. ".mysql_error());
         
        
//echo "New record en Plataforma inserted with ID ".mysql_insert_id();
        
                        /////////////////////////////////////////
                        //Envio correos informando del registro//
                        /////////////////////////////////////////

//Defino las variables del mensaje de correo


foreach ($_FILES as $rutaDoc)
 { 
if (
$bHayFicheros == 0)
 { 
$bHayFicheros 1
$headers .= "Content-type: multipart/mixed;"
$headers .= "boundary=\"--_Separador-de-mensajes_--\"\n"

$sCabeceraTexto "----_Separador-de-mensajes_--\n"
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"

$sTexto $sCabeceraTexto.$sTexto

if (
$rutaDoc["size"] > 0)
 { 
$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"
$sAdjuntos .= "Content-type: ".$rutaDoc["type"].";name=\"".$rutaDoc["name"]."\"\n";; 
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"
$sAdjuntos .= "Content-disposition: attachment;filename=\"".$rutaDoc["name"]."\"\n\n"

$oFichero fopen($rutaDoc["tmp_name"], 'r'); 
$sContenido fread($oFicherofilesize($rutaDoc["tmp_name"])); 
$sAdjuntos .= chunk_split(base64_encode($sContenido)); 
fclose($oFichero); 




$message=$cuerpo;
$remitente='From: [email protected]';

$destinatario ='To: [email protected]'
$asunto "IMPORTANTE: Solicitud de información desde ".$empresa
$cuerpo ".$nombre.' '.$apellido1.' ' del departamento '";

//para el envío en formato HTML 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"

//dirección del remitente 
$headers .= "From: Mailer <[email protected]>\r\n"

//dirección de respuesta, si queremos que sea distinta que la del remitente 
$headers .= "Reply-To: [email protected]\r\n"

//ruta del mensaje desde origen a destino 
$headers .= "Return-path: [email protected]\r\n"

//direcciones que recibián copia 
$headers .= "Cc: [email protected]\r\n"

//direcciones que recibirán copia oculta 
$headers .= "Bcc: [email protected]\r\n"

mail($destinatario,$asunto,$cuerpo,$headers);

//sigue el código para otra cosa

?>
Pero no funciona ni da error
¿Alguien pude hecharme una mano?
Estoy desesperadoooooo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #2 (permalink)  
Antiguo 31/07/2011, 07:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 7 meses
Puntos: 2534
Respuesta: Esquizofrenia con mail

¿Y como sabes que no funciona?

¿Ya has depurado linea por linea para ver hasta que instrucción ejecuta?

¿Estas seguro que tu hosting tiene la capacidad para enviar correos por SMTP?

Lo dices muy seguro como para no dar mas argumentos que "Pero no funciona ni da error", y vamos, que eso no dice nada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 31/07/2011, 09:27
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Esquizofrenia con mail

Hola Pateketrueke:

Nice to see you again.
Disculpa mi imprecisión.
Hasta donde yo se, seguro que no tanto como tú, he revisado el código. Envia pero no recibo el correo (como puedes imaginar primero me lo envio a mi mismo).
Si, estoy seguro de que mi Hosting tiene capacidad de enviar correos por SMTP.
Tengo el servidor de correo que viene en XAMPP configurado correctamente (otra parte del proyecto envia correos sin nigún problema).
La diferencia está en que ahora, en esta parte del proyecto, deseo enviar archivos adjuntos que capturo desde un formulario.
Por si no se te habia ocurrido, los archivos también se capturan correctamente.
Una vez contestadas tus útiles preguntas
¿Sabes que es lo que esta mal?
y si lo sabes
¿Podrias ser tan amable de indicármelo?
Yo y el resto de universo quedaremos eternamente agradecidos de que nos ilumines con tu sabiduria.
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #4 (permalink)  
Antiguo 31/07/2011, 09:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 7 meses
Puntos: 2534
Respuesta: Esquizofrenia con mail

Vamos a hacer una pequeña prueba:
Código PHP:
if (mail(/* argumentos */))
{
  echo 
'OK, se ha enviado.';

Si se muestra el texto tienes toda la razón de que no hay error, y la función cumple su cometido.

Pero aquí hay un problema, si no estas recibiendo nada entonces es mentira eso de que el servidor donde ejecutas dicho código tiene un SMTP activo y listo para servir.

Entiende mi sarcasmo, es obvio que leer código no nos dice mucho, no indica para nada el estado del servidor y la configuración del mismo... es solo código.

Deberías aprender a hacer preguntas inteligentes, de verdad, no hace daño.
http://www.sindominio.net/ayuda/preg...eligentes.html

Cita:
Hasta donde yo se, seguro que no tanto como tú, he revisado el código. Envia pero no recibo el correo (como puedes imaginar primero me lo envio a mi mismo).
Ahhh... si hubieras dicho eso desde un inicio, hubiéramos empezado por omitir el código, pues si lo envía significa que sirve. Pero no funciona.

Entonces crees que el problema sea de tu código, ¿o de tu servidor?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 31/07/2011, 12:56
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Esquizofrenia con mail

Hola de nuevo

Efectivamente, he puesto lo que me has indicado y recibo el mensaje de OK pero no recibo el mail. He chequeado las direcciones por estuvieran mal escritas y está bien escritas.
El error creo que está en algún punto del código de compsición del mensaje ya que le código lo he obtenido de fusionar dos códigos que funcionaban por separado.

Codigo A (mensaje de registro inicial para confirmar usuarios):

Código PHP:
                    /////////////////////////////////////////
                        //Envio correo de activación de usuario//
                        /////////////////////////////////////////

//Defino las variables del mensaje de correo

$message=$cuerpo;
$remitente='From: [email protected]';

$destinatario =$mailPersona
$asunto "IMPORTANTE: Activación de tu cuenta en Many Few Solutions"
$cuerpo 'Hola, para activar tu cuenta haz click en el siguiente link: '."\n".
<a href=http://localhost/login/activacion.php?codigo='
.$codigoACT.'>http://localhost/login/activacion.php?codigo='.$codigoACT.'</a>
O copia el siguiente link en la barra de direcciones de tu navegador:
'
."\n".'http://localhost/login/activacion.php?codigo='.$codigoACT;

//para el envío en formato HTML 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"

//dirección del remitente 
$headers .= "From: Mailer <[email protected]>\r\n"

//dirección de respuesta, si queremos que sea distinta que la del remitente 
$headers .= "Reply-To: [email protected]\r\n"

//ruta del mensaje desde origen a destino 
$headers .= "Return-path: [email protected]\r\n"

//direcciones que recibián copia 
$headers .= "Cc: [email protected]\r\n"

//direcciones que recibirán copia oculta 
$headers .= "Bcc: [email protected]\r\n"

mail($destinatario,$asunto,$cuerpo,$headers); 

Código B (para enviar ficheros adjuntos):

Código PHP:
<?php 
function form_mail($sPara$sAsunto$sTexto$sDe)
 { 
$bHayFicheros 0
$sCabeceraTexto ""
$sAdjuntos ""

if (
$sDe)$sCabeceras "From:".$sDe."\n"
else 
$sCabeceras ""
$sCabeceras .= "MIME-version: 1.0\n"
foreach (
$_POST as $sNombre => $sValor
$sTexto $sTexto."\n".$sNombre." = ".$sValor

foreach (
$_FILES as $vAdjunto)
 { 
if (
$bHayFicheros == 0)
 { 
$bHayFicheros 1
$sCabeceras .= "Content-type: multipart/mixed;"
$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n"

$sCabeceraTexto "----_Separador-de-mensajes_--\n"
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"

$sTexto $sCabeceraTexto.$sTexto

if (
$vAdjunto["size"] > 0)
 { 
$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"
$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";; 
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"
$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n"

$oFichero fopen($vAdjunto["tmp_name"], 'r'); 
$sContenido fread($oFicherofilesize($vAdjunto["tmp_name"])); 
$sAdjuntos .= chunk_split(base64_encode($sContenido)); 
fclose($oFichero); 



if (
$bHayFicheros
$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n"
return(
mail($sPara$sAsunto$sTexto$sCabeceras)); 


//cambiar aqui el email 
if (form_mail("[email protected]"$_POST[asunto], 
"Los datos introducidos en el formulario son:\n\n"$_POST[email])) 
echo 
"Su formulario ha sido enviado con exito"
?>
Los dos funcionan por serparado. Lo he comprobado. Yo he intentado obtener lo mejor de ambos mundos en el engendro inicial pero hay algo (o falta algo) que hace que no se reciba.

Un saludo y gracias por tu tiempo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #6 (permalink)  
Antiguo 31/07/2011, 16:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 7 meses
Puntos: 2534
Respuesta: Esquizofrenia con mail

Usa PHPMailer y deja de hacer engendros, si no lo sabes hacer bien no es justo que pierdas tiempo, y el de los demás.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 31/07/2011, 16:54
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Esquizofrenia con mail

Disculpa pero yo no estoy perdiendo el tiempo. Disculpa si te lo he hecho perder a tí, pensaba que escribías de modo altruista y no para alimentar tu ego.
Estoy aprendiendo y necesito ayuda. No tengo la suerte de haber nacido sabiendo como, al parecer, la tienes tú.
La ayuda que pido, la pido con cortesia y humildad en este foro, sin obligar a nadie ni exigir que nadie me atienda.
Cuando he resuelto algo interesante, según mi opinión, lo he aportado para ser útil sin esperar, por supuesto, ningún agradecimiento.
Si en alguna ocasión he podido ser útil a otros he hecho mi comentario sin soberbia, paternalismo inútil, ni condescendencia.
Me has contestado porque has querido sin demostrar nada, espero que tu ego quede satisfecho.
El resplandor de tu sabiduria es como una epifania que conmueve los cimientos del conocimiento. Resplandece, se útil y no estorbes.

Gracias por nada,
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #8 (permalink)  
Antiguo 31/07/2011, 17:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 7 meses
Puntos: 2534
Respuesta: Esquizofrenia con mail

¿Sabes cuantos posts iguales al tuyo han surgido a través de los años?

Bastantes diría yo, si buscas en el foro te vas a sorprender.

Es normal quieras aprender a desarrollar tu propio script para adjuntar archivos, pero es algo que ya existe, y si no lees las referencias adecuadas se tornará complicado ir ayudándote paso a paso.

Si de verdad quieres que sea úitl el post de menos trata de explicar que es lo que no entiendes de la integración de ambos, y que si entiendes. (justo como paso con la escueta descripción de tu problema)

El hecho de que finalmente dejes dos códigos ahí nos hace pensar algo: que tu quieres que alguien mas lo integre, y despeje tus dudas (¿cuales?) al respecto haciéndote un manual paso a paso como lo deberías hacer.

¿Tu quieres ser útil?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: html, mail, mysql, registro, tabla, variables
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 05:45.