Invio di e-mail HTML con allegato in PHP

Questa funzione consente di inviare una e-mail HTML con un file allegato. Lo script consente di identificare il fileType dell’allegato e consente di caricare un file da path su file system o da URL.

Questa funzione consente di inviare una e-mail HTML con un file allegato. Per fare questo è necessario leggere il file e codificarlo con base 64, e scrivere tutto utilizzando le intestazioni di posta.

Il parametro $fileAttachment identifica il nome del file da inviare (percorso o url). Il parametro $from dal parametro di specificare l’indirizzo del mittente. Il parametro $replyTo è opzionale e consente di specificare un indirizzo di reply-to diverso dal mittente. Gli altri parametri sono gli stessi di quelli della funzione mail php. La funzione restituisce TRUE se l’invio è riuscito.

Il Codice PHP

La funzione da utilizzare nello script PHP per l’invio della mail

/**
 * 
 * @param type $to
 * @param type $subject
 * @param type $messageHtml
 * @param type $from
 * @param type $fileAttachment
 * @param type $replyTo
 * @return type
 */
function sendMail($to, $subject, $messageHtml, $from, $fileAttachment, $replyTo = "") {
    // handles mime type for better receiving
    $ext = strrchr($fileAttachment, '.');
    $fileType = "";
    if ($ext == ".doc")
        $fileType = "application/msword";
    if ($ext == ".jpg")
        $fileType = "image/jpeg";
    if ($ext == ".gif")
        $fileType = "image/gif";
    if ($ext == ".zip")
        $fileType = "application/zip";
    if ($ext == ".pdf")
        $fileType = "application/pdf";
    if ($fileType == "")
        $fileType = "application/octet-stream";

    // read file into $data var
    if (substr(strtolower(trim($fileAttachment)), 0, 4) == "http") {
        $data = file_get_contents($fileAttachment);
    } else {
        $file = fopen($fileAttachment, "rb");
        $data = fread($file, filesize($fileAttachment));
        fclose($file);
    }

    // split the file into chunks for attaching
    $content = chunk_split(base64_encode($data));
    $uid = md5(uniqid(time()));

    // build the headers for attachment and html
    $h = "From: $from\r\n";
    if ($replyTo)
        $h .= "Reply-To: " . $replyTo . "\r\n";
    $h .= "MIME-Version: 1.0\r\n";
    $h .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
    $h .= "This is a multi-part message in MIME format.\r\n";
    $h .= "--" . $uid . "\r\n";
    $h .= "Content-type:text/html; charset=iso-8859-1\r\n";
    $h .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $h .= $messageHtml . "\r\n\r\n";
    $h .= "--" . $uid . "\r\n";
    $h .= "Content-Type: " . $fileType . "; name=\"" . basename($fileAttachment) . "\"\r\n";
    $h .= "Content-Transfer-Encoding: base64\r\n";
    $h .= "Content-Disposition: attachment; filename=\"" . basename($fileAttachment) . "\"\r\n\r\n";
    $h .= $content . "\r\n\r\n";
    $h .= "--" . $uid . "--";

    // send mail using php mail function
    return mail($to, $subject, strip_tags($messageHtml), str_replace("\r\n", "\n", $h));
}

Conclusioni

Spero di essere stato utile per risolvere il vostro problema di invio email con allegato con PHP, fai particolare attenzione alla definizione delle sorgente del file allegato, lo script consente di definire un path su file system o un url. Fatemi sapere se avete domande o commenti, lasciando un commento qui sotto.

Lascia un commento