Enviar mail con archivos adjuntos PHP

From Wiki de Caballero
Revision as of 20:26, 22 October 2013 by Alex (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Ejemplo de como mandar mail con archivos adjuntos:

Inicialmente asignamos en variables los parámetros básicos del correo: $to = contacto@destinatario.com; //mail del que recibe el email. $from = "contacto@remitente.com"; //mail del envía el email. $subject = 'Cotización KafBarcelona'; //

Ahora tenemos que crear un limitador único que tendremos que añadir cada vez que introduzcamos un fragmento de email, ya sea texto, html o fichero adjunto. $semi_rand = md5(time()); $mime_boundary = "==TecniBoundary_x{$semi_rand}x";

Una vez tenemos el limitador asignado, podemos crear la cabecera del email, asignando el MIME-Version; Content-Type: multipart/mixed ya que contendrá texto y ficheros adjuntos; y no se nos puede olvidar indicar el limitador que hemos creado. $headers = "From: $from"; $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";


Una vez hecho esto, ya se puede empezar a introducir en el contenido del correo fragmentos de texto y adjuntos, indicando siempre en cada fragmento, el boundary con — delante y el resto de características de cada fragmento, como el Content-Type y el Content-Transfer-Encoding: $message = "Información del cedente"; $message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"utf-8\"\r\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";


$file = './cotizaciones/cotizacion-' . $nombre . '.pdf'; $fp = fopen($file, "rb"); $data1 = fread($fp, filesize($file)); fclose($fp); $data = chunk_split(base64_encode($data1), 70);

$message .= "--{$mime_boundary}\r\n"; $message .= "Content-Type: application/xlsx;"; $message .= "name=\"" . basename($file) . "\"\r\n"; $message .= "Content-Transfer-Encoding: base64" . "\r\n\r\n" . $data . "\r\n"; $message .= "Content-Disposition: attachment\r\n\r\n";

$message .= "--{$mime_boundary}--"; mail($to, $subject, $message, $headers);


IMPORTANTE

Se debe verificar la cantidad de \r\n en el código y en comillas dobles.