Difference between revisions of "Enviar mail con archivos adjuntos PHP"
(16 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
== Ejemplo de como mandar mail con archivos adjuntos: == | == Ejemplo de como mandar mail con archivos adjuntos: == | ||
Inicialmente asignamos en variables los parámetros básicos del correo: <br> | |||
<syntaxhighlight lang="php" line> | |||
$to = "contacto@destinatario.com"; //mail del que recibe el email.<br> | |||
$from = "contacto@remitente.com"; //mail del envía el email.<br> | |||
$subject = "Cotización KafBarcelona"; //texto del asunto del email.<br> | |||
</syntaxhighlight><br> | |||
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.<br> | |||
<syntaxhighlight lang="php" line start="4"> | |||
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()); | $semi_rand = md5(time()); | ||
$mime_boundary = "==TecniBoundary_x{$semi_rand}x"; | $mime_boundary = "==TecniBoundary_x{$semi_rand}x"; | ||
</ | </syntaxhighlight><br> | ||
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. | 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.<br> | ||
< | <syntaxhighlight lang="php" line start="6"> | ||
$headers = "From: $from"; | $headers = "From: $from"; | ||
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; | $headers .= "\r\nMIME-Version: 1.0\r\n"; | ||
</ | $headers .= "Content-Type: multipart/mixed;\r\n"; | ||
$headers .= " boundary=\"{$mime_boundary}\""; | |||
</syntaxhighlight><br> | |||
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: | 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:<br> | ||
< | <syntaxhighlight lang="php" line start="10"> | ||
$message = "Información del cedente"; | $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"; | $message = "--{$mime_boundary}\r\n"; | ||
</ | $message .= "Content-Type: text/plain; charset=\"utf-8\"\r\n"; | ||
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n" . $message . "\r\n\r\n"; | |||
</syntaxhighlight><br> | |||
A la hora de añadir un fichero adjunto, es necesario obtener el contenido del fichero y formatearlo adecuadamente:<br> | |||
<syntaxhighlight lang="php" line start="14"> | |||
$file = './cotizaciones/cotizacion-' . $nombre . '.pdf'; | $file = './cotizaciones/cotizacion-' . $nombre . '.pdf'; | ||
$fp = fopen($file, "rb"); | $fp = fopen($file, "rb"); | ||
Line 35: | Line 38: | ||
fclose($fp); | fclose($fp); | ||
$data = chunk_split(base64_encode($data1), 70); | $data = chunk_split(base64_encode($data1), 70); | ||
</syntaxhighlight><br> | |||
Una vez formateado el fichero que adjuntaremos, añadiremos el fragmento al contenido del email sin olvidar indicar el Content-Type con el tipo de fichero adjunto, en Content-Transfer-Encoding indicaremos el tipo de codificación aplicada y por último, habrá que indicar Content-Disposition: attachment para que los clientes de correo identifiquen este fragmento de correo como un fichero adjunto.<br> | |||
<syntaxhighlight lang="php" line start="19"> | |||
$message .= "--{$mime_boundary}\r\n"; | $message .= "--{$mime_boundary}\r\n"; | ||
$message .= "Content-Type: application/xlsx;"; | $message .= "Content-Type: application/xlsx;"; | ||
Line 41: | Line 47: | ||
$message .= "Content-Transfer-Encoding: base64" . "\r\n\r\n" . $data . "\r\n"; | $message .= "Content-Transfer-Encoding: base64" . "\r\n\r\n" . $data . "\r\n"; | ||
$message .= "Content-Disposition: attachment\r\n\r\n"; | $message .= "Content-Disposition: attachment\r\n\r\n"; | ||
</syntaxhighlight><br> | |||
Finalmente, antes de ejecutar la función mail de PHP, tendremos que poner el limitador con — tanto delante, como detrás, para así marcar que se ha acabado el contenido del email.<br> | |||
<syntaxhighlight lang="php" line start="24"> | |||
$message .= "--{$mime_boundary}--"; | $message .= "--{$mime_boundary}--"; | ||
mail($to, $subject, $message, $headers); | mail($to, $subject, $message, $headers); | ||
</syntaxhighlight><br> | |||
== Importante == | |||
Se debe verificar los \r\n para tengan la misma cantidad que el código y que se encuentren dentro de comillas dobles. | |||
Se debe verificar |
Latest revision as of 19:16, 7 November 2013
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.<br>
$from = "contacto@remitente.com"; //mail del envía el email.<br>
$subject = "Cotización KafBarcelona"; //texto del asunto del email.<br>
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 .= "\r\nMIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " 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}\r\n";
$message .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n" . $message . "\r\n\r\n";
A la hora de añadir un fichero adjunto, es necesario obtener el contenido del fichero y formatearlo adecuadamente:
$file = './cotizaciones/cotizacion-' . $nombre . '.pdf';
$fp = fopen($file, "rb");
$data1 = fread($fp, filesize($file));
fclose($fp);
$data = chunk_split(base64_encode($data1), 70);
Una vez formateado el fichero que adjuntaremos, añadiremos el fragmento al contenido del email sin olvidar indicar el Content-Type con el tipo de fichero adjunto, en Content-Transfer-Encoding indicaremos el tipo de codificación aplicada y por último, habrá que indicar Content-Disposition: attachment para que los clientes de correo identifiquen este fragmento de correo como un fichero adjunto.
$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";
Finalmente, antes de ejecutar la función mail de PHP, tendremos que poner el limitador con — tanto delante, como detrás, para así marcar que se ha acabado el contenido del email.
$message .= "--{$mime_boundary}--";
mail($to, $subject, $message, $headers);
Importante
Se debe verificar los \r\n para tengan la misma cantidad que el código y que se encuentren dentro de comillas dobles.