Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905

    [PHP] email spam e allegati

    Cosa devo settare nei parametri della funzione mail() nelle intestazioni per indicare a php di non inviare l'email non sottoforma di spam? e sopratutto....come faccio ad allegare qualcosa ad una email con php e prima di allegare il file a zipparlo (se non sapete come zippare fa niente)?
    Grazie a tutti

  2. #2
    Guarda a caso ho proprio lo script che fa al caso tuo ovviamente è da adattare e ci sono vari controlli da aggiungere ma le basi ci sono:

    Lo script comprende 3 file: index.php che contiene il form di invio, mail.php che compie la funzione di postino e pclzip.lib.php libreria in cui è definita la classe pclzip (http://www.phpconcept.net/pclzip/index.en.php per la documentazione).

    Lo script prevede anche l'esistenza di una cartella tmp.

    Index.php
    Codice PHP:
    <html>
    <
    head>
    <
    title>Documento senza titolo</title>
    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </
    head>

    <
    body>
    <
    form action="mail.php" method="post" enctype="multipart/form-data" name="mail">
      

     

      </
    p>
      <
    table width="100%" border="0" cellspacing="2" cellpadding="0">
        <
    tr
          <
    td>Indirizzo</td>
          <
    td><input name="address" type="text" id="address"></td>
        </
    tr>
        <
    tr
          <
    td>Oggetto</td>
          <
    td><input name="subject" type="text" id="subject"></td>
        </
    tr>
        <
    tr
          <
    td>Allegato</td>
          <
    td><input name="attch" type="file" id="attch"></td>
        </
    tr>
        <
    tr
          <
    td colspan="2"> <div align="left">
              <
    textarea cols="60" rows="10" name="testo" id="testo"></textarea>
            </
    div></td>
        </
    tr>
        <
    tr
          <
    td><input type="submit" name="invia" value="Invia"></td>
          <
    td><input type="reset"></td>
        </
    tr>
      </
    table>
      

     </
    p>
    </
    form>
    </
    body>
    </
    html
    Mail.php
    Codice PHP:
    <?php
    function missing_val()
    {
        echo 
    "Un dato necessario per l'invio della mail è mancante";
        exit;
    }

    if(!
    file_exists("pclzip.lib.php"))
    {
        echo 
    "Una libreria indispensabile per lo script non è stata trovata";
    }
    else
    {
        include(
    "pclzip.lib.php");
        
    $mittente "me@localhost";
        
    $reply $mittente;
        if(isset(
    $_POST['testo'])) $testo $_POST['testo'];
        if(!isset(
    $_POST['address']) && !isset($_POST['subject']))
        {
            
    missing_val();
        }
        else
        {
            
    $destinatario $_POST['address'];
            
    $oggetto $_POST['subject'];
        }
        if(!empty(
    $_FILES['attch']['tmp_name']))
        {
            
    //MAIL CON ALLEGATO
            
    $attch_tmp $_FILES['attch']['tmp_name'];
            
    $attch_name $_FILES['attch']['name'];
            
    move_uploaded_file($attch_tmp,"./tmp/".$attch_name);
            
    $n explode(".",$attch_name);
            
    $l count($n);
            
    $n[$l-1] = "zip";
            
    $nome implode(".",$n);
            
    $zip = new PclZip("./tmp/".$nome);
            
    $zip->add("./tmp/"."$attch_name",PCLZIP_OPT_REMOVE_PATH"tmp");
            
    $attch_type mime_content_type("./tmp/".$nome);
            
    $attch_size filesize("./tmp/".$nome);
            
            
    $boundary md5(uniqid(microtime()));
            
            
    $intestazioni "From: $mittente\n"
            
    $intestazioni .= "Reply-To: $reply\n";
            
    $intestazioni .= "MIME-version: 1.0\n";
            
    $intestazioni .= "Content-type: multipart/mixed;\n boundary=\"$boundary\"\n";
            
    $intestazioni .= "Content-transfer-encoding: 7BIT\nX-attachments: $nome";
            
            
    $body_top "--$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 $testo
            
            
    $filez fopen("./tmp/".$nome"r"); 
            
    $contents fread($filez$attch_size); 
            
    $encoded_attach chunk_split(base64_encode($contents)); 
            
    fclose($filez); 
            
            
    $msg_body .= "\n\n--$boundary\n"
            
    $msg_body .= "Content-type: $attch_type; name=\"$nome\"\n"
            
    $msg_body .= "Content-Transfer-Encoding: BASE64\n"
            
    $msg_body .= "Content-disposition: attachment; filename=\"$nome\"\n\n";
            
    $msg_body .= "$encoded_attach\n"
            
    $msg_body .= "--$boundary--\n";
            
            
    unlink("./tmp/".$attch_name);
            
    unlink("./tmp/".$nome);
        }
        else
        {
            
    //MAIL SENZA ALLEGATO
            
    $intestazioni "From: $mittente\n"
            
    $intestazioni .= "Reply-To: $reply\n";
            
    $intestazioni .= "MIME-Version: 1.0\r\n";
            
    $intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n";
            
            
    $msg_body $testo;
        }
        if(@
    mail($destinatario,$oggetto,$msg_body,$intestazioni))
        {
            echo 
    "Mail inviata con successo";
        }
        else
        {
            echo 
    "Errore nell'invio della mail";
        }    
    }
    ?>
    Se ti servono delucidazioni chiedi pure

  3. #3
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    e se volessi utilizzare questo script senza la compressione zip per esemipo per allegare le immagini?

  4. #4
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    ho dato un'occhiata allo script che mi hai suggerito e ne ho creato uno prenendone spunto dal tuo, metterò un controllo dei campi in javascript. Però ho 3 problemi: se invio l'email senza l'allegato dice che ci sono problemi, se la invio con allegato dice che c'è un errore nella funzione mime_content_type e poi non capisco alcuni passaggi, che ho segnato con un commento.
    questo è il file invia_mail.htm
    codice:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Invia un'email</title>
    <style type="text/css">
    <!--
    body,td,th,table {
    	font-family: Tahoma;
    	font-size: 12px;
    	color: #000000;
    }
    body {
    	background-color: #FFFFFF;
    }
    a {
    	font-size: 12px;
    	color: #000000;
    }
    a:link {
    	text-decoration: none;
    }
    a:visited {
    	text-decoration: none;
    	color: #000000;
    }
    a:hover {
    	text-decoration: none;
    	color: #FFFFFF;
    }
    a:active {
    	text-decoration: none;
    	color: #000000;
    }
    -->
    </style></head>
    <body>
    <center>Invia un'email</center>
    <form action="mail.php" method="post" enctype="multipart/form-data">
    A: <input type="text" id="email" name="email">
    
    
    Oggetto: <input type="text" id="oggetto" name="oggetto">
    
    
    Testo: <textarea cols="35" rows="5" id="testo" name="testo"></textarea>
    
    
    Allegato (opzionale): <input type="file" id="allegato" name="allegato">
    
    
    
    <input type="submit" name="invia" id="invia" value="Invia l'email">
    </form>
    </body>
    </html>
    non credo che ci siano problemi con questo file .
    ecco invece il file mail.php
    Codice PHP:
    <html>
    <head>
    <style type="text/css">
    <!--
    BODY {
        color: #000000;
        font-family: Tahoma;
        font-size: 12px;
    }
    </style>
    </head>
    <body>
    <?php
    if(!isset($_FILES)) { //rendiamo lo script compatibile con le precedenti versioni di php
      
    $_FILES $HTTP_POST_FILES;
    }

    $server "invio_mail@{$_SERVER['HTTP_HOST']}"/*il mittente non esiste in realtà, a meno che non si
    abbia un email reale [email]webmaster@(tuosito.com[/email]) o il tuo server, ma comunque per una questione estetica
    mettiamo che l'email sia inviata dal webmaster*/
    $mittente "Serviziodiinviomaildi{$_SERVER['HTTP_HOST']}<{$server}>"/*
    in pratica: Servizio di invio mail di (server) <invio_mail@(server)>*/
    $risposta "tuamail@dominio.it"//la mail a cui rispondere
    $testo $_POST['testo']; /*ricaviamo il testo da inviare*/
    $email $_POST['email']; /*ricaviamo l'indirizzo a cui inviare la mail*/
    $oggetto $_POST['oggetto']; /*ricaviamo l'oggetto della mail*/

    function allegato() { //creiamo il corpo dell'email con l'allegato
      
    $allegato $_FILES['allegato']['tmp_name']; //spiegatemi questo passaggio
      
    $allegato $_FILES['allegato']['name']; //spiegatemi questo passaggio
      
    move_uploaded_file($allegato_tmp"./tmp/".$allegato); //spiegatemi questo passaggio
      
    $mime_allegato mime_content_type("./tmp/".$allegato); //spiegatemi questo passaggio
      
    $dimensione_allegato filesize("./tmp/".$allegato);
      
    $boundary md5(uniqid(microtime())); //spiegatemi questo passaggio
      
    $intestazioni "From: $mittente\n"//settiamo come mittente della mail la variabile $mittente
      
    $intestazioni .= "Reply-To: $risposta\n"//impostiamo l'indirizzo email a cui rispondere
      
    $intestazioni .= "MIME-version: 1.0\n";
      
    $intestazioni .= "Content-type: multipart/mixed;\n boundary=\"$boundary\"\n";
      
    $intestazioni .= "Content-transfer-encoding: 7BIT\nX-attachments: $allegato";
      
    $intestazioni_corpo "--$boundary\n"//spiegatemi questo passaggio
      
    $intestazioni_corpo .= "Content-type: text/html; charset=iso-8859-1\n"/*impostiamo il formato
      della mail in HTML*/
      
    $intestazioni_corpo .= "Content-transfer-encoding: 7BIT\n";
      
    $intestazioni_corpo .= "Content-description: Mail message body\n\n";
      
    $corpo_messaggio $intestazioni_corpo $testo;
      
    $apertura_allegato fopen("./tmp/".$allegato"r");
      
    $contenuto_allegato fread($apertura_allegato$dimensione_allegato);
      
    $allegato_codificato chunk_split(base64_encode($contenuto_allegato));
      
    fclose($apertura_allegato);
      
    $corpo_messaggio .= "\n\n--$boundary\n"//spiegatemi questo passaggio
      
    $corpo_messaggio .= "Content-type: $mime_allegato; name=\"$allegato\"\n";
      
    $corpo_messaggio .= "Content-Transfer-Encoding: BASE64\n";
      
    $corpo_messaggio .= "Content-disposition: attachment; filename=\"$allegato\"\n\n";
      
    $corpo_messaggio .= "$allegato_codificato\n"//e infine l'allegato
      
    $corpo_messaggio .= "--$boundary--\n"//spiegatemi questo passaggio
      
    unlink($allegato); //eliminiamo il file temporaneo dell'allegato, che ora sta nell'email
    }

    function 
    no_allegato() { //la mail senza allegato
      
    $intestazioni "From: $mittente\n"//settiamo come mittente della mail la variabile $mittente
      
    $intestazioni .= "Reply-To: $risposta\n"//impostiamo l'indirizzo email a cui rispondere
      
    $intestazioni .= "MIME-Version: 1.0\r\n";
      
    $intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n"/*impostiamo il formato
      della mail in HTML*/
      
    $corpo_messaggio $testo;
    }

    if(!empty(
    $_FILES['allegato']['tmp_name'])) { //controlliamo che ci sia l'allegato o meno
      
    allegato(); //impostiamo i parametri dell'invio della mail con l'allegato
    }else{
      
    no_allegato(); //impostiamo i parametri dell'invio dell'email senza l'allegato
    }
      
      

    if(@
    mail($email$oggetto$corpo_messaggio$intestazioni)) { /*mettiamo la funzione di invio email
      e controlliamo che sia stata inviata*/
      
    $messaggio "La mail è stata inviata con successo!"//testo di successo dell'invio della mail
    }else{
      
    $messaggio "Ci sono stati problemi con l'invio della mail, quini potrebbe essere non stata inviata correttamente"/*
      testo di fallimento dell'invio della mail*/
    }

    echo 
    $messaggio//facciamo sapere all'utente come è andato a finire l'invio
    ?>
    </body>
    </html>
    spiegatemi i passaggi con i commenti appositi grazie e se possibile ditemi come posso far funzionare questo script.

  5. #5
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    non c'è nessuno che mi può aiutare?

  6. #6
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    allora?????? non lo sa nessuno???????? o non mi volete rispondere??????

  7. #7
    Codice PHP:
    $allegato_tmp $_FILES['allegato']['tmp_name']; //spiegatemi questo passaggio 
    Quando un file viene uppato sul server viene messo nella cartella prestabilita per i file temporaneri in $_FILESS['nome']['tmp_name'] ci sta il nome del tuo file dentro la cartella temporanea

    Codice PHP:
    $allegato $_FILES['allegato']['name']; //spiegatemi questo passaggio 
    Qui ricavi il nome originale del file. es. car.jpg, programma.zip,...

    Codice PHP:
     move_uploaded_file($allegato_tmp"./tmp/".$allegato); //spiegatemi questo passaggio 
    Questa funzione sposta il file uppato dalla cartella temporanea predefinita di php alla cartella ./tmp/nome_originale_file.estensione

    Codice PHP:
    $mime_allegato mime_content_type("./tmp/".$allegato); //spiegatemi questo passaggio 
    Questa funzione ricava il mime-type di un file che serve poi in seguito negli header della mail per fare capire di che tipo di allegato si tratta. Tale funzione funziona solo se l'estensione magic.mime è attiva. Per l'utlizzo che fai tu cmq ti consiglio di modificare così che ti risparmi di usare questa funzione:
    $mime_allegato = $_FILES['allegato']['type'];

    Codice PHP:
    $boundary md5(uniqid(microtime())); //spiegatemi questo passaggio 
    Crei una stringa alfanumerica lunga 32 bite che serve come separatore per le varie parti della mail

    Codice PHP:
    $intestazioni_corpo "--$boundary\n"//spiegatemi questo passaggio 
    Gli header della mai prevedono un certo tipo di raggruppamente e tale raggruppamento deve essere fatta separando i gruppi con una stringa specificata nella riga: "Content-type: multipart/mixed;\n boundary=\"$boundary\"\n";
    tale stringa deve rimanere la stessa per tutte le sezioni della mail

  8. #8
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    ho capito.. quindi se voglio farlo funzionare con gli allegati dovrei semplicemente modificare mime_content_type("./tmp/".$allegato); in $_FILES['allegato']['type']; . Per l'invio della mail con l'allegato è tutto a posto. ma se volessi far funzionare anche quello senza l'allegato? cosa devo sistemare?

  9. #9
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    se invio l'email senza allegato fallisce e se al invio con l'allegato fallisce e mi da questo errore:

    Warning: filesize() [function.filesize]: stat failed for ./tmp/ilsito.gif in C:\Programmi\Apache Group\Apache2\test\ksend\mail.php on line 35

    Warning: fopen(./tmp/ilsito.gif) [function.fopen]: failed to open stream: No such file or directory in C:\Programmi\Apache Group\Apache2\test\ksend\mail.php on line 48

    Warning: fread(): supplied argument is not a valid stream resource in C:\Programmi\Apache Group\Apache2\test\ksend\mail.php on line 49

    Warning: fclose(): supplied argument is not a valid stream resource in C:\Programmi\Apache Group\Apache2\test\ksend\mail.php on line 51

    Warning: unlink(ilsito.gif) [function.unlink]: No such file or directory in C:\Programmi\Apache Group\Apache2\test\ksend\mail.php on line 58

    cosa è successo?

  10. #10
    Utente bannato
    Registrato dal
    Sep 2005
    Messaggi
    905
    allora?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.