PHPBBIntegrare PHPBB PHPFunzioni PHP CFunzioni C EcologiaLa mia ecologia   Chi siamoChi è Senamion HomeHome page corner Il Web e l'ecologia

Senamion


Chi siamo:

Il web e l'ecologia, condividere il web e un momento di riflessione sullo stato dell'ecologia e sul suo futuro

Google

[PHP] Inviare una mail con allegato un file

15 Giugno 2006 by Giovanni | Argomenti: , , , , | 12740

Con questa funzione é possibile inviare una mail allegando un file.
La funzione calcola automaticamente la dimensione e il tipo file e permette anche di utilizzare un foglio di stile e l’html all’interno del testo del messaggio.
Ricordo che per inviare semplicemente una email senza utilizzare html ne’ allegati é sufficiente utilizzare la funzione mail del php.

// // FUNZIONE PER L'INVIO DI MAIL CON ALLEGATI // $mex E' IL MESSAGGIO DELL'EMAIL (CON FORMATTAZIONE HTML) // $oggetto E' L'OGGETTO // $aChi E' IL DESTINATARIO // $mittente E' IL MITTENTE // $allegato E' NOME DEL FILE CHE SI VUOLE ALLEGARE (COMPRENSIVO DI PATH) // $nomeAllegato E' IL NOME DEL FILE ALL'INTERNO DELLA MAIL // $bcc SONO I DESTINATARI DELLE COPIE CONFORMI NASCOSTE // $reply E' LA MAIL A CUI VIENE INVIATA UNA EVENTUALE RISPOSTA // LASCIARE VUOTA SE E' LA STESSA DEL MITTENTE // $stile UN'EVENTUALE BLOCCO DI STILE PER LA FORMATTAZIONE DEL MESSAGGIO // COMPRENSIVO DI <style> E </style> // function mailAllegati( $mex, $oggetto, $aChi, $mittente, $allegato, $nomeAllegato, $bcc = "", $reply = "", $stile = "") { $filetype = mime_content_type($allegato); $filez = fopen($allegato, "r"); $contents = fread($filez, filesize($allegato)); $encoded_attach = chunk_split(base64_encode($contents)); fclose($filez); if ($reply == "") $reply = $mittente; // CREO L'INTESTAZIONE $testa = "From: $mittenten"; if ($bcc != "") $testa .= "BCC: $bcc;n"; $testa .= "Reply-To: $replyn"; $testa .= "X-Mailer: Sismail Web Email Interfacen"; $testa .= "MIME-version: 1.0n"; $testa .= "Content-type: multipart/mixed;n"; $testa .= " boundary="Message-Boundary"n"; $testa .= "Content-transfer-encoding: 7BITn"; $testa .= "X-attachments: $nomeAllegato"; // CREO IL MESSAGGIO $corpo = "--Message-Boundaryn"; $corpo .= "Content-type: text/html; charset=iso-8859-1n"; $corpo .= "Content-transfer-encoding: 7BITn"; $corpo .= "Content-description: Mail message bodynn"; $corpo .= "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">"; $corpo .= "<HTML><HEAD>"; $corpo .= "<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">"; $corpo .= $stile; $corpo .= "</HEAD>"; $corpo .= "<BODY>"; $corpo .= $mex; $corpo .= "</BODY></HTML>"; $corpo .= "nn--Message-Boundaryn"; $corpo .= "Content-type: $filetype; name="$nomeAllegato"n"; $corpo .= "Content-Transfer-Encoding: BASE64n"; $corpo .= "Content-disposition: attachment; filename="$nomeAllegato"nn"; $corpo .= "$encoded_attachn"; $corpo .= "--Message-Boundary--n"; if(@mail($aChi, $oggetto, $corpo, $testa)) return true; else return false; }

I parametri da passare sono descritti nel commento in testa alla funzione, ecco comunque un esempio di chiamata:

$aChi = "a_chi_la_mando@tuosito.it"; $mittente = "io@miosito.it"; $oggetto = "Oggetto del messaggio"; $messaggio = "<H1>TITOLO</H1>nCiao!<br />n"; $allegato = "allegato.pdf"; $nomeAllegato = "allegato.pdf"; if (mailAllegati($messaggio, $oggetto, $aChi, $mittente, $allegato, $nomeAllegato, "", "", "")) echo "Invio della email effettuato."; else echo "Invio della email fallito.";

Nel caso non fosse disponibile la funzione mime_content_type, é possibile ovviare mettendo all’inizio del programma:

if ( ! function_exists ( 'mime_content_type ' ) ) { function mime_content_type ( $f ) { return system ( trim( 'file -bi ' . escapeshellarg ( $f ) ) ) ; } }

Come descritto sul manuale del php.

Pubblicato in Funzioni e classi PHP e C |

15 Commenti a “[PHP] Inviare una mail con allegato un file”

  1. Emanuel scrive:

    grazie mille!
    funziona a meraviglia

  2. Emanuela scrive:

    Grazie mille funziona alla grande :D !

    ciao ciaoooooooo

  3. Francesco scrive:

    A me invece non va
    dice che non riesce ad aprire il file da allegare…

  4. Francesco scrive:

    Ho messo il path completo, il file è online e ho inserito:
    http://miosito.it/miofile.pdf

    Sbaglio qualcosa?

  5. Giovanni scrive:

    Devi mettere il nome del file con path relativo al disco e quindi senza http:, quindi qualcosa tipo miadirectory/miofile.pdf

  6. nello scrive:

    Se si tratta di una immamgine da allegare e non un testo, come si fa in php perchè nella e-mail ricevuta possa vedere l’icona dei file allegati?

  7. Giovanni scrive:

    Se si allega un’immagine (con lo stesso procedimento) si vedrà l’icona degli allegati.

  8. Perym scrive:

    E se io volessi impostare un limite massimo per gli allegati?
    In modo tale che utenti sprovveduti non mi inviino allegati da 100MB?

  9. Giovanni scrive:

    E’ sufficiente inserire un test prima di chiamare la funzione (o all’inizio della funzione, del tipo:

    if (filesize($allegato) > 2000000)
       echo "allegato troppo grande";
    

  10. Perym scrive:

    ok grazie

  11. GioMBG scrive:

    php 5+ non va

    $Catalog = \

  12. GioMBG scrive:

    ho provato ad inserire codice ma me lo ha tagliato

  13. Giovanni scrive:

    Prova a ripostare senza doppi apici!

  14. djhell scrive:

    “\n\n”

    non và bene… sarebbe da mettere \r\n perchè certi webmail non fanno vedere l’html se manca la \r…

    Per il resto, con qualche modifica, lo script sta eseguendo un ottimo lavoro.

    Grazie 1000!!

  15. Andrea scrive:

    Mille grazie ho preso spunto dal tuo script per adattarlo alla mia esigenza. mi hai risparmiato un bel po\’ di lavoro.
    GRAZIE GRAZIE GRAZIE!!!

Scrivi un commento