Re: [PHP-ES] Fallo al adjuntar archivos en mail
[email protected] (Juan Manuel Acuña Barrera)
| Newsgroups | php.general.es |
|---|---|
| Message-ID | <[email protected]> |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 En la página encontré que tienen versión para Windows :D !!! http://caspian.dotconf.net/menu/Software/SendEmail/ A ver si te sirve. Suerte! El 29/04/2011, a las 13:54, Manoli Gil Muñoz escribió: > Muchas gracias Juan Manuel pero estoy en Windows :(. > > De todas formas, siempre es interesante saber nuevas opciones, el saber no ocupa lugar. > > Aunque tengo linux en otro equipo antiguo pero no sé si lo podría adaptar para la web que estoy haciendo. > > De todos modos muchísimas gracias. > > > > From: [email protected] > > Date: Fri, 29 Apr 2011 09:55:11 -0500 > > To: [email protected] > > Subject: Re: [PHP-ES] Fallo al adjuntar archivos en mail > > > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > No mencionas que sistema operativo usas. En linux (desconozco si existe para otras plataformas) yo uso un programa que llamo desde shell_exec que se llama sendEmail de la siguiente forma: > > > > > > $comando="sendEmail "; > > $comando.=" -f $remitente "; > > $comando.=" -t $destinatario1 "; > > if(strlen($destinatario2)>5) $comando.=" -cc $destinatario2"; > > if(strlen($destinatario3)>5) $comando.=" -cc $destinatario3"; > > if(strlen($destinatario4)>5) $comando.=" -cc $destinatario4"; > > $comando.=" -u $cabecera "; > > $comando.=" -m $cuerpo "; > > $comando.=" -s smtp.servidor.de.correo "; > > $comando.=" -xu $remitente "; > > $comando.=" -xp $password "; > > $comando.=" -a $file1 $file2 $file3"; // <---- Esta es la linea donde pongo los adjuntos > > > > $salida=shell_exec("$comando"); > > > > Espero que te sirva. > > > > Suerte! > > > > El 28/04/2011, a las 15:10, Guillermo Rodriguez escribió: > > > > > Deberias buscar entre las funciones que tienes para el correo si tienes > > > alguna para adjuntar el archivo al correo > > > la forma en que lo estas haciendo solo lee el archivo y lo pega en el > > > contenido del correo, lo cual hace desplegar esos caracteres, si es el > > > contenido del archivo de word, pero no esta siendo adjuntado, si no pegado. > > > > > > La clase php-mailer tiene un metodo para adjuntar archivos, te podria servir > > > como referencia o hasta te podria resultar util el utilizarla. > > > > > > Espero te sirva de algo esto. > > > > > > El 28 de abril de 2011 12:50, Manoli Gil Muñoz <[email protected]>escribió: > > > > > >> > > >> Buenas tardes lista: > > >> > > >> Tengo el siguiente problema a ver si alguien me puede ayudar. Voy a > > >> explicar primero el problema y luego expondré el código por si a alguien le > > >> interesa. > > >> > > >> Tengo un formulario a través del cual se debe de adjuntar un archivo. Este > > >> archivo debe ser sólo de word, tipo .doc . Además el botón se tiene que > > >> llamar Adjuntar en lugar del típico Examinar. > > >> Hasta ahí todo bien ya que tenía un sistema de subida de archivos al > > >> servidor. Así que lo que hago es a través de un botón normal y con > > >> Javascript abrir una ventana en la que se adjunta el archivo y se sube al > > >> servidor con un botón tipo file. Luego cuando se haya enviado el mail ya se > > >> borra dicho archivo para no sobrecargar el servidor. Todo eso perfecto. > > >> Luego a través de otro código construyo el mail para enviarlo. Bueno, todo > > >> perfecto a excepción de que el archivo en lugar de venir adjunto viene en > > >> forma de caracteres en el cuerpo del mensaje. > > >> Para probarlo me lo envío a mi cuenta de correo antes de poner la del > > >> cliente. Tengo una cuenta en hotmail y otra en gmail y en ambas llega el > > >> correo pero no adjunta el archivo sino que a continuación del cuerpo del > > >> mensaje me pone una ristra de caracteres que seguramente serán los > > >> correspondientes al archivo pero que no tiene que ver con su contenido. El > > >> aspecto es algo así: > > >> > > >> ----_Separador-de-mensajes_-- > > >> Content-type: ;name="Stonehenge.doc" > > >> Content-Transfer-Encoding: BASE64 > > >> Content-disposition: attachment;filename="Stonehenge.doc" > > >> > > >> 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAKgAAAAAAAAAA > > >> EAAALAAAAAEAAAD+////AAAAACkAAAD///////////////////////////////////////////// > > >> .... y un montón de caracteres más. > > >> > > >> Además lo que quiero es que aparezca el archivo adjunto y no el contenido > > >> insertado en el cuerpo. > > >> > > >> El código de construcción y envío de mail con archivo adjunto funciona, > > >> puesto que lo he usado en otro servidor, además que lo he visto en varios > > >> sitios de internet. Sé que este problema le ha pasado a más personas pero > > >> nadie les ha proporcionado una respuesta. Llevo una semana mirando multitud > > >> de páginas sin encontrar lo que necesito. > > >> > > >> He probado con la clase PHPMailer y tampoco funciona además los mensajes no > > >> llegan en formato html sino con todo el código html inscrustado en el > > >> mensaje. > > >> > > >> Así que si alguien puede darme alguna idea estaré muy agradecida. Muchas > > >> gracias de antemano. > > >> > > >> A continuación detallo código: > > >> > > >> 1º En el formulario tengo un botón: > > >> <input type="submit" class="btn-adjunto-form" name="adjuntar" > > >> value="Adjuntar" onclick="abreVentana('./subir_trabajo.php')"> > > >> > > >> 2º El archivo "subir_trabajo.php" lo único que hace es mostrar el típico > > >> botón de file para poder recoger el archivo y almacenarlo en el servidor > > >> utilizando la clase Uploads: > > >> <?php > > >> session_start(); > > >> $_SESSION['name'] = ''; > > >> $_SESSION['type'] = ''; > > >> $_SESSION['size'] = ''; > > >> $_SESSION['tmp_name'] = ''; > > >> $subidaok = $_SESSION['subidaok']; > > >> if (isset($_REQUEST['subir'])) { > > >> require_once("./librerias/Uploads.class.php"); > > >> $up = new Uploads(); > > >> $up->setExtensiones("doc"); > > >> $carpeta = "."; > > >> $up->setCarpeta($carpeta,true); // El 2º valor lo pongo a true para que si > > >> la carpeta no existe la cree automaticamente > > >> $up->setMaxTamano(3000000); > > >> $up->setCampoForm("archivo"); > > >> if ($up->Subir()) { > > >> echo "El archivo <b>".$up->getNombreArchivo()."</b> se ha adjuntado > > >> correctamente.<br>Cierre la ventana para finalizar de enviar el > > >> formulario."; > > >> $_SESSION['name'] = $up->getNombreArchivo(); > > >> $_SESSION['type'] = $up->getExtension(); > > >> $_SESSION['size'] = $up->getTamano(); > > >> $_SESSION['tmp_name'] = $up->getArchivoSub(); > > >> $_SESSION['subidaok'] = true; > > >> exit; > > >> } else { > > >> $error = $up->verErrores(); > > >> echo "<b>Se ha producido el siguiente error:</b><br><br>"; > > >> echo implode("<br>",$error); > > >> echo "<br>Cierre la ventana y vuelva a intentarlo si lo desea teniendo en > > >> cuenta que sólo pueden ser archivos de word. (con extensión doc)<br><br>"; > > >> $_SESSION['subidaok'] = false; > > >> exit; > > >> } > > >> } > > >> ?> > > >> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " > > >> http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > > >> <html> > > >> <head> > > >> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> > > >> <title>Subir Trabajos</title> > > >> <link href='./estilos/estilos.css' rel='stylesheet' type='text/css'> > > >> </head> > > >> <body> > > >> <fieldset class="adjuntos"><legend class="txt-legend">Subir > > >> Archivos</legend> > > >> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" > > >> enctype="multipart/form-data" name="form1" id="form1"> > > >> <label for="file" class="txt-form-gris">Archivo:</label> > > >> <input type="file" name="archivo" class="btn-examinar" id="archivo"> > > >> <br><br> > > >> <span class="txt-form-gris">(Sólo puede subir archivos doc)</span><br> > > >> <input name="subir" type="submit" class="btn-form" id="subir" > > >> value="Enviar"> > > >> </form> > > >> </fieldset> > > >> </body> > > >> </html> > > >> > > >> 3º Construyo el mensaje una vez comprobado que todos los datos son > > >> correctos y ayudada por una variable de sesión subidaok que controla que se > > >> haya subido al servidor el archivo y una vez enviado el mail elimino el > > >> archivo del servidor: > > >> session_start(); > > >> $cuerpo = "Envío de trabajo desde el formulario\n\n"; > > >> $cuerpo .= "Título del trabajo: " . utf8_decode($_POST["titulo"]) . > > >> "\n\n"; > > >> $cuerpo .= "Nombre: " . utf8_decode($_POST['nombre'.$i]) . "\n"; > > >> @$archivo_Name = $_SESSION['name']; > > >> @$archivo_Size = $_SESSION['size']; > > >> @$archivo_Temp = $_SESSION['tmp_name']; > > >> @$archivo_Mime_Type = $_SESSION['type']; > > >> $sCabeceras = "From:".$sDe." - Desde el Formulario de inserción de > > >> trabajos \r\n"; > > >> $sCabeceras .= "MIME-version: 1.0\n"; > > >> if ($subidaok) { > > >> $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"; > > >> $cuerpo = $sCabeceraTexto.$cuerpo; > > >> if ($archivo_Size > 0) { > > >> $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"; > > >> $sAdjuntos .= "Content-type: > > >> ".$archivo_Mime_Type.";name=\"".$archivo_Name."\"\n"; > > >> $nombreFichero = $archivo_Name; > > >> $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"; > > >> $sAdjuntos .= "Content-disposition: > > >> attachment;filename=\"".$archivo_Name."\"\n\n"; > > >> $oFichero = fopen($archivo_Temp, 'r'); > > >> $sContenido = fread($oFichero, $archivo_Size); > > >> $sAdjuntos .= chunk_split(base64_encode($sContenido)); > > >> fclose($oFichero); > > >> } > > >> } > > >> if ($subidaok) > > >> $cuerpo .= "\nEl mensaje incluye el archivo adjunto > > >> \"".$nombreFichero."\"\n".$sAdjuntos."\n\n----_Separador-de-mensajes_----\n"; > > >> $destinatario = "[email protected]"; > > >> $asunto = "Envío desde el Formulario"; > > >> $enviado = envio($destinatario,$asunto,$cuerpo,$sCabeceras); > > >> $_SESSION['subdidaok'] = $subidaok = false; > > >> if ($enviado) { > > >> // Ahora eliminar el archivo del servidor > > >> ?> <script language=javascript> window.alert("Gracias por rellenar el > > >> formulario. Se ha enviado correctamente.\n"); </script> <? > > >> } else { > > >> ?> <script language=javascript> window.alert("Lo lamento pero el env\xEDo > > >> ha fallado. Por favor, int\xE9ntelo de nuevo.\n"); </script> <? > > >> } > > >> unlink($archivo_Temp); > > >> > > > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG/MacGPG2 v2.0.14 (Darwin) > > > > iEYEARECAAYFAk260VcACgkQTc4QiYN6hDcO3gCgj9YJh5UmdFBXZ5NcfNcj11hL > > jZAAnieOs1geGGHPaj+Rp8xfVMRwUCpC > > =4yje > > -----END PGP SIGNATURE----- > > > > -- > > PHP Spanish Localization Talk Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.14 (Darwin) iEYEARECAAYFAk27FsYACgkQTc4QiYN6hDfCzQCfccM7QZlOY4tI/cMCpiR396av bEgAniEeFhCAy6QfcD0EHXptNLiMFwVH =rWsQ -----END PGP SIGNATURE-----