Difference between revisions of "Enviar mail con archivos adjuntos PHP"

From Wiki de Caballero
Jump to navigation Jump to search
Line 1: Line 1:


== 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>
Inicialmente asignamos en variables los parámetros básicos del correo: <br>
Line 10: Line 9:
</code>
</code>


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.
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<br> fichero adjunto.<br>
<code>
<code>
$semi_rand = md5(time());
$semi_rand = md5(time());<br>
$mime_boundary = "==TecniBoundary_x{$semi_rand}x";
$mime_boundary = "==TecniBoundary_x{$semi_rand}x";<br>
</code>
</code>


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<br>que contendrá texto y ficheros adjuntos; y no se nos puede olvidar indicar el limitador que hemos creado.<br>
<code>
<code>
$headers = "From: $from";
$headers = "From: $from";<br>
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";<br<
</code>
</code>




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 <br>fragmento, el boundary con — delante y el resto de características de cada fragmento, como el Content-Type y el Content-Transfer-Encoding:<br>
<code>
<code>
$message = "Información del cedente";
$message = "Información del cedente";<br>
$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}\n" . "Content-Type: text/plain; charset=\"utf-8\"\r\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
</code>
</code>


A la hora de añadir un fichero adjunto, es necesario obtener el contenido del fichero y formatearlo adecuadamente:<br>
<code>
$file = './cotizaciones/cotizacion-' . $nombre . '.pdf';<br>
$fp = fopen($file, "rb");<br>
$data1 = fread($fp, filesize($file));<br>
fclose($fp);<br>
$data = chunk_split(base64_encode($data1), 70);<br>
</code>


$file = './cotizaciones/cotizacion-' . $nombre . '.pdf';
Una vez formateado el fichero que adjuntaremos, añadiremos el fragmento al contenido del email sin olvidar indicar el Content-Type con el <br>tipo de fichero adjunto, en Content-Transfer-Encoding indicaremos el tipo de codificación aplicada y por último, habrá que indicar <br>Content-Disposition: attachment para que los clientes de correo identifiquen este fragmento de correo como un fichero adjunto.<br>
$fp = fopen($file, "rb");
<code>
$data1 = fread($fp, filesize($file));
$message .= "--{$mime_boundary}\r\n";<br>
fclose($fp);
$message .= "Content-Type: application/xlsx;";<br>
$data = chunk_split(base64_encode($data1), 70);
$message .= "name=\"" . basename($file) . "\"\r\n";<br>
$message .= "Content-Transfer-Encoding: base64" . "\r\n\r\n" . $data . "\r\n";<br>
$message .= "Content-Disposition: attachment\r\n\r\n";<br>
</code>


$message .= "--{$mime_boundary}\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 <br>que se ha acabado el contenido del email.<br>
$message .= "Content-Type: application/xlsx;";
<code>
$message .= "name=\"" . basename($file) . "\"\r\n";
$message .= "--{$mime_boundary}--";<br>
$message .= "Content-Transfer-Encoding: base64" . "\r\n\r\n" . $data . "\r\n";
mail($to, $subject, $message, $headers);<br>
$message .= "Content-Disposition: attachment\r\n\r\n";
</code>
 
$message .= "--{$mime_boundary}--";
mail($to, $subject, $message, $headers);


== IMPORTANTE ==
== IMPORTANTE ==


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

Revision as of 20:32, 22 October 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.
$from = "contacto@remitente.com"; //mail del envía el email.
$subject = 'Cotización KafBarcelona'; //texto del asunto del email.

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}\"";<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:
$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";

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 la cantidad de \r\n en el código y en comillas dobles.