> Manuales > Prácticas para PHP marcadas como obsoletas

Clase en PHP que nos permite utilizar la función mail de PHP para enviar correos con archivos PDF como adjuntos.

No recomendamos actualmente usar AttachMailer como clase PHP para enviar adjuntos por email. En lugar de ello te recomendamos usar PHPMailer que es una clase potente y ampliamente extendida en el mundo de PHP que permiten hacer todo tipo de operaciones relacionadas con el envío de correo electrónico, como adjuntar archivos a los correos y muchas otras cosas. PHPMailer está correctamente actualiado, muy extendido y es la base de muchas otras librerías de envío de email en PHP, por lo que te garantiza mejor funcionamiento y mucha mayor seguridad.

En este nuevo artículo de nuestro Taller de PHP vamos a ver una clase en PHP que nos permite enviar correos con archivos PDF u otro tipo de adjuntos desde PHP y con la función nativa "Mail()".

Antes de comenzar siempre me gusta dar a conocer el autor de la clase que estamos analizando. Y en esta ocasión es "Lattuada" y nos deja esta clase en la página de PHPClasses.

Bien, ya conocemos al autor y también el lugar desde donde podemos descargarla, ahora toca ver el funcionamiento y hacer algún ejemplo.

Lo primero que tenemos que hacer es descargarnos el archivo "AttachMailer.php" y colocarlo en nuestro proyecto, en una carpeta o en la raíz.

Una vez que lo tenemos descargado y puesto en nuestro proyecto, podemos pasar a ver la estructura básica de un ejemplo con dicha clase.

<?php 
require_once('AttachMailer.php'); 

$mailer = new AttachMailer("correo@correo.com", "correo_destino@correo.com", "asunto", "hello contenido del mensaje");
$mailer->attachFile("garantia.pdf");
$mailer->send() ? "Enviado": "Problema al enviar";


El código es sencillo de entender.

Lo primero que estamos haciendo es incluir el archivo que contiene la clase.
A continuación, creamos un objeto de "AttachMailer", es decir, de la clase que nos permite enviar correos con archivos PDF u otro tipo como adjuntos.

En esa misma instancia añadimos los datos que necesitamos para poder enviar el correo.
El primero es el correo origen, luego el destinatario, el asunto del mensaje y terminamos con el cuerpo del mensaje.

La siguiente linea nos permite añadir los archivos pdf, .txt, .php, etc que queramos adjuntar. Podemos adjuntar tantos archivos como queramos. Simplemente se trata de ir añadiendo dicha línea con cada archivo.

La última es la que nos da la opción de enviar el archivo adjunto, junto con la función "send".

Cómo podéis ver es bien sencillo de utilizar, pero creo que es importante colocar el contenido de la clase para que entiendas mejor todo el código. Si entramos en el archivo "AttachMailer.php" podemos encontrar las siguientes lineas:

 <?php

/*
 * @author : nicolas Lattuada 
 * send emails with pdf attachment
 */

class AttachMailer{
    
    private $from, $to, $subject, $mess, $hash, $output;
    private $documents = Array();
    
    /*
     * @params from: adresse de l'envoyeur(+reponse)
     *            to : adresse a qui on envoie
     *            subject : le sujet du message
     *            mess : le message lui meme(format html)
     */
    function __construct($_from, $_to, $_subject, $_mess){
        $this->from = $_from;
        $this->to = $_to;
        $this->subject = $_subject;
        $this->mess = $_mess;
        $this->hash = md5(date('r', time()));
    }
    
    /*
     * @params url du document ajout
     */    
    public function attachFile($url, $name = ""){
        $attachment = chunk_split(base64_encode(file_get_contents($url)));
        $docName    = $name == "" ? basename($url) : $name;
        $randomHash = $this->hash;
        $docOutput = "--PHP-alt-$randomHash--rnrn"
                     ."--PHP-mixed-$randomHashrn"
                     ."Content-Type: application/pdf; name="$docName" rn"
                     ."Content-Transfer-Encoding: base64 rn"
                     ."Content-Disposition: attachment rnrn"
                     .$attachment . "rn";
        $this->documents[] = $docOutput;
    }
    
    private function makeMessage(){
        $randomHash = $this->hash;
        $messageOutput = "--PHP-mixed-$randomHashrn"
                         ."Content-Type: multipart/alternative; boundary=PHP-alt-$randomHashrnrn"
                         ."--PHP-alt-$randomHashrn"
                         ."Content-Type: text/plain; charset='iso-8859-1'rn"
                         ."Content-Transfer-Encoding: 7bitrnrn"
                         .$this->mess . "rnrn"
                         ."--PHP-alt-$randomHashrn"
                         ."Content-Type: text/html; charset='iso-8859-1'rn"
                         ."Content-Transfer-Encoding: 7bitrnrn"
                         . $this->mess . "rn";
                         
        foreach($this->documents as $document){
            $messageOutput .= $document; 
        }
        $messageOutput .="--PHP-mixed-$randomHash;--";
        $this->output = $messageOutput;
    }
    
    public function send(){
        $this->makeMessage();
        $from = $this->from;
        $randomHash = $this->hash;
        $headers = "From: $fromrnReply-To: $from";
        $headers .= "rnContent-Type: multipart/mixed; boundary="PHP-mixed-$randomHash"";
        $mail_sent = @mail( $this->to, $this->subject, $this->output, $headers );
        return $mail_sent ? true : false;
    }
    
}

¡Espero que te sea de utilidad y ayuda!

Sara Alvarez

Equipo DesarrolloWeb.com

Manual