Tengo un problema con un script, al intentar enviar un email con un archivo adjunto, si llega bien el correo y si llega con el archivo adjunto, el problema es que cuando intento verlo o descargarlo aparece truncado. Sin embargo cuando descargo el archivo que queda en el Servidor (para ver si acaso no se esta haciendo el 'upload' correctamente) éste si se puede abrir sin problemas.
Con el fin de monitorear el comportamiento del archivo adjunto en la bandeja de correo, puse 'inline' en lugar de 'attachment' en la parte de "Content-Disposition".
Como dato informativo, estoy haciendo el script en Dreamweaver - MacOSX (monitoreando que no haga caracteres basura), estoy usando un Servidor Virtual (AT&T hosting), la carpeta donde estoy poniendo el script y donde se estan alojando los archivos adjuntos tiene permisos 777. Ahh! lo olvidaba, el script no arroja ningun error a la hora de su ejecucion.
Si alguien puede ayudarme a ver que estoy omitiendo o poniendo mal en el codigo le agradecere muchisimo me lo haga saber.
De antemano muchas gracias!!!!
Javier
Este es el codigo del formulario HTML:
Código PHP:
<html>
<head>
<title>Envio de Email</title>
</head>
<body>
<form action="mail.php" method="POST" enctype="multipart/form-data">
<table width="480" border="0" cellpadding="0" cellspacing="0" bgcolor="E3E3E3">
<tr>
<td height="36" align="right"><font size="2" face="Arial, Helvetica, sans-serif">Email:</font></td>
<td width="380"><font size="2" face="Arial, Helvetica, sans-serif">
<input name="from" type="text" size="32" />
</font></td>
</tr>
<tr>
<td align="right"><font size="2" face="Arial, Helvetica, sans-serif">Mensaje:</font></td>
<td width="380"><font size="2" face="Arial, Helvetica, sans-serif">
<textarea name="message" cols="32" rows="6"></textarea>
</font></td>
</tr>
<tr>
<td height="36" align="right"><font size="2" face="Arial, Helvetica, sans-serif">Archivo</font></td>
<td width="380"><font size="2" face="Arial, Helvetica, sans-serif">
<input name="fileatt" type="file" size="22" />
</font></td>
</tr>
<tr>
<td height="48" align="right"><font size="2" face="Arial, Helvetica, sans-serif"> </font></td>
<td width="380"><font size="2" face="Arial, Helvetica, sans-serif">
<input name="submit" type="submit" value="Enviar" />
</font></td>
</tr>
</table>
</form>
</body>
</html>
Este es el codigo PHP:
Código PHP:
<html>
<head>
<title>Envio de Email con Attachments</title>
</head>
<body>
<?
// Variables de saltos de linea
$UN_SALTO="\r\n";
$DOS_SALTOS="\r\n\r\n";
// Variables de headers y contenido del email
$to="correo_destino@nombre_dominio.etc";
$from=$_POST['from'];
$subject="Attachments";
$message=$_POST['message'];
// Leer el tipo de archivo
$fileatt_type = $_FILES['fileatt']['type'];
// Leer el tamano del archivo
$tamano = $_FILES ['fileatt']['size'];
// Comprobar el tamano del archivo y hacer upload
if( $tamano < 1024000 ){
move_uploaded_file($_FILES['fileatt']['tmp_name'],$_FILES['fileatt']['name']);
// Leer el nombre de archivo
$fileatt = $_FILES['fileatt']['name'];
echo $upload = true;
}
// Comprobando si se subio el archivo se procede a componer el mensaje
if($upload){
// Se genera el separador
$separador = "_separador_trozos_".md5 (uniqid (rand()));
$headers = "MIME-Version: 1.0".$UN_SALTO;
$headers .= "From: $from".$UN_SALTO;
$headers .="X-Mailer: PHP/". phpversion().$UN_SALTO;
$headers .= "Content-Type: multipart/mixed;".$UN_SALTO;
$headers .= " boundary = $separador".$DOS_SALTOS;
// Parte primera -Mensaje en formato HTML
// Separador inicial
$texto ="--$separador".$UN_SALTO;
// Encabezado parcial
$texto .="Content-Type: text/html; charset=\"ISO-8859-1\"".$UN_SALTO;
$texto .="Content-Transfer-Encoding: Quoted-printable".$DOS_SALTOS;
// Contenido de esta parte del mensaje
$texto .= $message;
// Separador de partes
$att = $UN_SALTO."--$separador".$UN_SALTO;
// Parte segunda -Archivo adjunto
// Encabezado parcial
$att .="Content-Type: {$fileatt_type} name=\"{$fileatt}\"".$UN_SALTO;
$att .="Content-Disposition: inline; filename=\"{$fileatt}\"".$UN_SALTO;
$att .="Content-Transfer-Encoding: base64".$DOS_SALTOS;
// lectura del fichero adjunto si este subio correctamente
$file = fopen ($fileatt, "rb");
$data = fread ($file, filesize ($fileatt));
fclose ($file);
// codificacion del fichero adjunto
$att .= chunk_split(base64_encode($data));
// separador final del mensaje
$att .= $UN_SALTO."--$separador--".$UN_SALTO;
// Union de las diferentes partes para crear el cuerpo del mensaje
$message = $texto.$att;
// envio del mensaje
if( @mail($to, $subject, $message, $headers)){
echo "<p>Mensaje enviado!</p>";
} else {
echo "<p>Error al enviar el mensaje!</p>";
}
}
?>
</body>
</html>