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

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-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.