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-----