Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Invia mail con allegati

    Mi trovo a dover risolvere un curioso problema (almeno per me che conosco poco il PHP).
    Consiste in questo: uso da un po' degli script mediati da questo sito e un po' da altre esperienze, per inviare email tramite script php, con allegati.
    Devo dire che sembra funzionare egregiamente:
    Codice PHP:
    <?php
    // Campi da variare per personalizzare il messaggio
    $destinatario "info@miosito.it";
    $redirOK "http://www.miosito.it/mail/ok.asp";
    $redirKO "http://www.miosito.it/mail/ko.asp";

    //Questa parte non deve essere modificata!
    function clean($key) {
        
    $key=str_replace("\\"""$key);
        
    $find=array(
            
    "/bcc\:/i",
            
    "/Content\-Type\:/i",
            
    "/Mime\-Type\:/i",
            
    "/cc\:/i",
            
    "/to\:/i"
        
    );
      
    $key=preg_replace($find,"",$key);
      return 
    $key;
    }

    // Recupero il valore dei campi del form
    extract($_POSTEXTR_SKIP);


    // Valorizzo le variabili relative all'allegato
    $allegato $_FILES['allegato']['tmp_name'];
    $allegato_type $_FILES['allegato']['type'];
    $allegato_name $_FILES['allegato']['name'];

    // Genero il "separatore"
    // Serve per dividere, appunto, le varie parti del messaggio.
    // Nel nostro caso separerà la parte testuale dall'allegato
    $semi_rand md5(time());
    $mime_boundary "{$semi_rand}";

    // Aggiungo intestazioni e routines necessarie per l'allegato
    $messaggio clean($messaggio);

    // Controllo che nome, destinatario, mittente e oggetto siano riportati
    if (trim($destinatario) == "") {
    header("location: $redirKO"); 
    exit;
    }
    if (
    trim($mittente) == "") {
    header("location: $redirKO"); 
    exit;
    }
    if (
    trim($nome) == "") {
    $nome $mittente;}

    if (
    trim($oggetto) == "") {
    header("location: $redirKO"); 
    exit;
    }
    $headers "From: " $nome " <".$mittente.">";
    // Definisco il tipo di messaggio (MIME/multi-part)
    $headers .= "\nMIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/mixed;\n";
    $headers .= " boundary=\"{$mime_boundary}\"\n";
    $headers .="This is a multi-part message in MIME format.\n";
    $msg "";

    // Verifico se il file è stato caricato correttamente via HTTP
    // In caso affermativo trasformo il file
    if (is_uploaded_file($allegato))
    {
      
    // Apro e leggo il file allegato
      
    $file fopen($allegato,'rb');
      
    $data fread($filefilesize($allegato));
      
    fclose($file);

      
    // Adatto il file al formato MIME base64 usando base64_encode
      
    $data chunk_split(base64_encode($data));  
    }

    // Questa è la parte "testuale" del messaggio
    $msg .= "--{$mime_boundary}\n"// Metto il separatore
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
    $msg .= "Content-Transfer-Encoding: quoted-printable\n\n";
    //  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
    $msg .= $messaggio "\n\n";

    // Se abbiamo un allegato...
    if (is_uploaded_file($allegato))
    {
      
    // Aggiungo l'allegato al messaggio
      
    $msg .= "--{$mime_boundary}\n"// inizializzato da un separatore
      
    $msg .= "Content-Disposition: attachment;\n";
      
    $msg .= " filename=\"{$allegato_name}\"\n";
      
    $msg .= "Content-Transfer-Encoding: base64\n\n";
      
    $msg .= $data "\n\n";
    }
    // Alla fine, in ogni caso, chiudo con il separatore di fine messaggio terminato da due hyphens
    $msg .= "--{$mime_boundary}--\n";

    // Invio la mail
    if (mail($destinatario$oggetto$msg$headers))
    {
      
    header("location: $redirOK"); 
    }else{
      
    header("location: $redirKO"); 
    }
    ?>

    Succede però che alcuni allegati (non piccoli, ma non giganteschi) non producano alcun invio: vale a dire, esce per "ok", ma la mail indicata in testa non riceve nulla.
    Non vedo qui, alcun controllo di dimensione, ma naturalmente può essere che mi sbaglio, o che ci sia un limite di default che io non conosco, o non so dove trovare.

    Qualcuno sa darmi qualche spunto?
    Grazie.

  2. #2
    Aggiungo qualche informazione, dopo aver fatto altre prove:[list=1][*]Il problema pare riguardare esclusivamente gli allegati immagine, di dimensione superiore ai 50K[*]Il valore riportato da PHP.ini per upload_max_filesize è 50M.[*]Un file di tipo DOC, di circa 700K, allegato con lo stesso script è arrivato benissimo.[/list=1]
    Grazie.

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.