Ver Mensaje Individual
  #11 (permalink)  
Antiguo 28/01/2009, 22:01
franco190453
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años, 1 mes
Puntos: 33
Respuesta: Archivo adjunto en envio de mensaje con php - urgente!

Les incluyo lo necesario para adjuntar un archivo ->
AL INICIO DEBE IR EL CORREO DESTINO, EL ASUNTO Y EL MENSAJE!!!.
AL FINAL DEBE IR mail($correo, $asunto, $mensaje, $headers);
Cita:
$headers = "From: [email protected]\n";
$headers .= "Reply-To: [email protected]\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"MIME_BOUNDRY\"\n";
$headers .= "This is a multi-part message in MIME format.\n";

$fp = fopen(($_FILES['miarchivo']['tmp_name']),"r");
$str = fread($fp, filesize($_FILES['miarchivo']['tmp_name']));
$str = chunk_split(base64_encode($str));
$fp = fclose($fp);


$message = "--MIME_BOUNDRY\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n";
$message .= "\n";
$message .= "$mensaje";
$message .= "\n";

$message .= "--MIME_BOUNDRY\n";
$message .= "Content-Type: application/octet-stream; name=\"nuevo.txt\"\n";
$message .= "Content-disposition: attachment\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "\n";
$message .= "$str\n";
$message .= "\n";
$message .= "--MIME_BOUNDRY--\n";
Comentarios ->
1.- se define el hecho que el correo contendra varias fronteras MIME (MIME BOUNDRY).
2.- se toma el archivo proveniente de un upload o en su defecto del directorio o ruta donde fisicamente se encuentra el archivo, se codifica con la funcion base64_encode.
3.- se define la primera frontera del correo que involucra el mensaje que en este caso es de contenido text/plain, utiliza los charset (iso-8859-1 o bien puede ser utf... y se establece que es "quoted-printable".
4.- se establece la ultima frontera que contiene el archivo adjunto definido por $str con contenido application/octet-stream (que es para archivos de texto y debera variar segun el archivo que se envie, para imagenes jpg seria image/jpeg, etc).
Se establece su disposicion a ser un adjunto; es decir que debe ser tomado como adjunto cuando el servidor de correo del destinatario lo reciba y se debe indicar lo a la funcion que se utilizo para codificar el archivo, que en este caso es base64.

Asi termina el codigo
Saludos
Franco

P.S. No omito manifestar que el tipo de archivo es necesario saberlo para poder establecer los content-type que se enviaran en la cabecera del correo; esto es muy importante y para generalizar el codigo pueden hacer algo asi ->
if($type == "image/gif") {
$message .= "Content-Type: image/gif \n";
etc etc etc...
}