Pagina 1 di 11 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 104
  1. #1

    [PILLOLA] Inviare email in formato HTML e con allegato in PHP

    Quasi tutti gli utenti del php sanno che è possibile con questo fantastico linguaggio inviare delle email con pochissime righe di codice.

    Credo però che pochi sappiano che aggiungendo qualche altra riga di codice sia possibile arricchire le email inviate con codice html e, magari perchè no, con un bel allegato.


    Ed ecco l'idea di creare questa pillola.


    Tempo fa ho trovato su qualche sito un bel codice che serviva proprio a fare questo mestiere qui.
    L'ho letto, l'ho studiato, l'ho riscritto semplificandolo un pochino e ho deciso di postarlo su questo forum.

    Dato il successo che ha ottenuto ho deciso di semplificarlo ancora un pochino, di ricommentarlo da capo e di riportarlo qui, al fine di charire i dubbi che sono nati nell'altra discussione.


    Ma bado alle ciance, eccovi subito, per intero tutto il codice necessario:

    Codice PHP:
    <? 

    $mess
    ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"> 
    <HTML><HEAD> 
    <META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\"> 
    <STYLE> 
    H5 {text-align: justify; text-decoration: none; color: #333333; font-size: 12px; font-family: Arial} 
    A:link, A:visited, A:hover { color: #FFcc00 } 

    </STYLE> 
    </HEAD> 
    <BODY bgColor=#ffffff link=#333333 alink=#333333 vlink=#333333> 
    <DIV><h5>BLA BLA BLA BLA. Questo è il corpo dell'email; si possono usare tutti i tag html, come se si trattasse di una pagina internet.</h5> 
    </BODY></HTML> 
    "


    /*Nella variabile $mess va inserito tutto il codice html che comporrà il corpo dell'email che si vuole inviare. Come nell'esempio si possono utilizzare anche i fogli di stile.*/

    $e="destinatario@email.it"/*Inserire l'indirizzo email a cui si vuole spedire l'email*/
    $ogg="Oggetto dell'email"/*Inserire l'oggetto dell'email da spedire*/
    $mittente="miaemail@email.com"/*Inserire l'indirizzo email che verrà visulaizzato come mittente dell'email*/
    $reply="miaemail@email.com"/*Inserire l'indirizzo email a cui verranno inviate le risposte all'email inviata*/

    $titolo="allegato.pdf"/*Inserire il nome che si vuole dare all'allegato*/
    $f="file.pdf"/*Inserire l'indirizzo del file che si vuole inviare come allegato*/
    $filetype="application/pdf"/*Inserire il formato MIME del file da allegare*/



    /*Non modificare nulla al di sotto di questa linea*/

    $intestazioni "From: $mittente\nReply-To: $reply\nX-Mailer: Sismail Web Email Interface\nMIME-version: 1.0\nContent-type: multipart/mixed;\n boundary=\"Message-Boundary\"\nContent-transfer-encoding: 7BIT\nX-attachments: $titolo"

    $body_top "--Message-Boundary\n"
    $body_top .= "Content-type: text/html; charset=iso-8859-1\n"
    $body_top .= "Content-transfer-encoding: 7BIT\n"
    $body_top .= "Content-description: Mail message body\n\n"

    $msg_body $body_top $mess

    $filez fopen($f"r"); 
    $contents fread($filezfilesize($f)); 
    $encoded_attach chunk_split(base64_encode($contents)); 
    fclose($filez); 

    $msg_body .= "\n\n--Message-Boundary\n"
    $msg_body .= "Content-type: $filetype; name=\"$titolo\"\n"
    $msg_body .= "Content-Transfer-Encoding: BASE64\n"
    $msg_body .= "Content-disposition: attachment; filename=\"$titolo\"\n\n";
    $msg_body .= "$encoded_attach\n"
    $msg_body .= "--Message-Boundary--\n"

    if(!(@
    mail($e,$ogg,$msg_body$intestazioni))){ 
    print 
    "<H5>Invio della email fallito.</H5>";} 
    ?>

    Il codice è tutto qui.

    Come avrete notato non è molto più complicato di quello neccessario all'invio di una semplice email in formato testuale; si tratta semplicemente di "giocare" un po' con le intestazione dell'email in modo da specificare che si tratta di un email in formato HTML e con un bel allegato.


    Vediamo ora di analizzare quali sono le righe da modificare per personalizzare il codice:

    Per prima cosa andrà sostituito il contenuto della variabile $mess. In questa variabile deve essere immesso tutto il codice HTML che andrà a comporre il corpo dell'email. Lo si può scrivere tranquillamente pensando che si tratti di una pagina web. Occorre però porre attenzione alla compatibilità: consiglio di utilizzare solamente i tag più comuni e supportati, pena la differente visulizzazione del messaggio che sia visto con outlook express piuttosto che in una webmail con browser differenti!

    Codice PHP:
    $e="destinatario@email.it"/*Inserire l'indirizzo email a cui si vuole spedire l'email*/
    $ogg="Oggetto dell'email"/*Inserire l'oggetto dell'email da spedire*/
    $mittente="miaemail@email.com"/*Inserire l'indirizzo email che verrà visulaizzato come mittente dell'email*/
    $reply="miaemail@email.com"/*Inserire l'indirizzo email a cui verranno inviate le risposte all'email inviata*/ 
    Su queste righe non mi soffermerò troppo: vanno inseriti il destinatario dell'email, l'oggetto, il mittente e l'indirizzo di risposta, ovvero l'indirizzo che in automatico appare quando si "risponde" all'email.

    Codice PHP:
    $titolo="allegato.pdf"/*Inserire il nome che si vuole dare all'allegato*/
    $f="file.pdf"/*Inserire l'indirizzo del file che si vuole inviare come allegato*/
    $filetype="application/pdf"/*Inserire il formato MIME del file da allegare*/ 
    Queste righe invece rappresentano la configurazione dell'allegato.
    In $titolo va specificato il nome che vogliamo dare all'allegato, quello che sarà visualizzato dal destinatario dell'email.
    In $f dobbiamo specificare il percorso al file che vogliamo allegare. Il file deve risiedere sul server; volendo, facendo qualche piccolissima modifica allo script, si può caricare il file da allegare direttamente dal computer locale. Ma questo sarà uno step successivo.
    In $filetype va inserito il formato MIME del file puntato da $f. Attenzione è molto importante scrivere accuratamente il tipo mime del file, pena il non funzionamento dello script. Purtroppo non sono in grado di fornirvi una tabella che espliciti il formato MIME per ogni tipo di file. So solo dirvi che a ogni tipo di file (immagine jpg, piuttosto che file zip, piuttosto che pagina HTML, etcetc) corrsiponde un formato mime differente.


    Questo è quanto va modificato per personalizzare lo script.
    Per poter testare in locale questo script è neccessario che abbiate installato e configurato un server mail.

    Spero di essere stato utile a molti.

    Saluti.
    Teuccio

  2. #2
    io comentato quelle linee perchè non voglio allegare nessun file!!
    Wami agency
    Io odio tutti gli up-loads!

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    151

    e senza allegato?

    ragazzi volendo togliere l'allegato cosa dovrei fare? :master:

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    151
    ok ce l'ho fatta, però quando ricevo la-email mi fa vedere tutte le email dei destinatari e non è bello... cosa si può fare? :gren:

  5. #5
    beh c'è sempre il bcc (copia carbone nascosta)
    metti come destinatario te stesso e i veri destinatari come bcc

    anche se in teoria la funzione mail non è fatta x queste cose
    ricorda che non puoi mettere 9999999 destinatari xchè se no lo script va in time-out

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    151
    $bcc="mia@email.it"; /*Inserire l'indirizzo email reale a cui spedire*/


    Ho inserito questa riga subito sotto a:

    $e="destinatario@email.it"; /*Inserire l'indirizzo email a cui si vuole spedire l'email*/


    ma non va

  7. #7
    devi modificare
    Codice PHP:
    $intestazioni "From: $mittente\nReply-To: $reply\nX-Mailer: Sismail Web Email Interface\nMIME-version: 1.0\nContent-type: multipart/mixed;\n boundary=\"Message-Boundary\"\nContent-transfer-encoding: 7BIT\nX-attachments: $titolo"
    con
    Codice PHP:
    $intestazioni "From: $mittente\nBCC: $bcc;\nReply-To: $reply\nX-Mailer: Sismail Web Email Interface\nMIME-version: 1.0\nContent-type: multipart/mixed;\n boundary=\"Message-Boundary\"\nContent-transfer-encoding: 7BIT\nX-attachments: $titolo"

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    151
    ciao funziona il mascheramento degli indirizzi e-mail.. però non funziona l'invio multiplo, mi spiego , quando inserisco piu di un indirizzo email mi fallisce l'invio delle e-mail successive alla prima e mi restituisce il classico messaggio di errore, io le metto cosi:

    $bcc="mia@emailuno.it , mia@emaildue.it"

    dove sbaglio? ciao e grazie sei gentilissimo, se fumi ti offro volentieri una sigaretta

  9. #9
    devi separare le emails con ;
    es:
    Codice PHP:
    $bcc="ciao@ciao.org; [email]prova@wiva.it[/email]"
    no, non fumo grazie =P
    una bella girl no eh? =P

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2000
    Messaggi
    151
    ehehehe... giustamente anche te hai ragione.. per la ragazza intendo


    ma sai che le email me le fallisce lo stesso?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.