[Script] Enviar e-mails con archivos adjuntos en PHP

Hace mucho tiempo me volví loco para encontrar un script, función o cualquier tipo de ayuda para enviar un email con archivos adjuntos en PHP, ya que todo lo que encontraba no me funcionaba. Supongo que al igual que a mi, hay más gente en las mismas, por lo que me dispongo a copiar una función que encontré aquí. Está hecha de forma totalmente sencilla, en la que para ejecutarla, simplemente tengamos que escribir:

//Ejemplo de usar la función para enviar un fichero llamado fichero.exe que se encuentra en la misma ruta que el script
mail_attachment("fichero.exe","","destinatario@hotmail.com","remitente@delanover.com","Administrador","no-reply@delanover.com","Asunto","Mensaje de prueba");

En caso de que se ejecute correctamente veremos el mensaje de mail send … OK. En caso contrario, veremos el otro mensaje: mail send … ERROR!.

Recordemos que para usar este script, nuestro servidor web ha de ser capaz de enviar correos electrónicos. De no ser así, obviamente no funcionará, pero para los que esteis seguros que funciona, este script debería de funcionar.

Aquí la función:

function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
    $file = $path.$filename;
    $file_size = filesize($file);
    $handle = fopen($file, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    if (mail($mailto, $subject, "", $header)) {
        echo "mail send ... OK"; // or use booleans here
    } else {
        echo "mail send ... ERROR!";
    }
}

Un saludo, lipman

5 Replies to “[Script] Enviar e-mails con archivos adjuntos en PHP”

  1. Contento de que estés vivo!

    Cómo ya habrás visto, Google y Microsoft han modificado su sistema de geolocalización. Ahora no devuelven la posición de una simple MAC introducida. Escanean las redes cercanas y, solo entonces te devuelven la posición para asegurarse que nadie que sepa solo la MAC de un ap pueda localizarla.

    Un saludo!

  2. Muchas gracias!
    Pues no lo habia odio, aunque si que me lo estaba temiendo un poco por cierta inexactitud a la hora de geolocalizar, incluso en muchos software que usaban este sistema ya han dejado de funcionar, como algunas aplicaciones para Android.

    Me puedes pasar el sitio en donde has leido la noticia completa o algo con más detalles?

    Un saludo!

  3. Pues ya me lo temía, ningún método para obtener las MAC’s funcionaba desde que dejaron de funcionar páginas como las de Samy Kamkar.
    No se donde lo leí, pero el texto era este:

    http://arstechnica.com/microsoft/news/2011/08/microsoft-locks-down-wi-fi-location-service-after-privacy-concerns.ars

    Es una gran lástima que ya no funcione este método, siempre se puede hacer un uso malintencionado de las utilidades, pero en este caso no lo veía tan grave yo.

    Saludos

Leave a Reply

Your email address will not be published. Required fields are marked *