Visualizzazione risultati 1 fino 8 di 8

Discussione: Allegati in Email [ERRORE]

  1. #1
    Guest

    Exclamation Allegati in Email [ERRORE]

    questo upload dovrebbe inviarmi degli allegati alla mia email..
    ma quando ricevo l'email al posto degli allegati ci sono i codici binari.
    come fare in modo che vedo l'allegato (immagine)???

    upload.php
    Codice PHP:
    <table>
    <tr>
    <td align="left">
    <form name="form1" method="post" enctype="multipart/form-data" action="invia.php">
    <table width="100%" border="0">
    <tr>
    <td>
    <div align="right">
    Utente:
    </div>
    </td>
    <td class="titleblu">
    <?php
    echo "$userdata[username]";
    ?>
    </td>
    </tr>
    <tr>
    <td>
    <div align="right">
    Marca:
    </div>
    </td>
    <td>
    <div align="left">
    <input name="marca" type="text" id="marca" size="20">
    </div>
    </td>
    </tr>
    <tr>
    <td>
    <div align="right">
    Modello:
    </div>
    </td>
    <td>
    <div align="left">
    <input name="modello" type="text" id="modello" size="20">
    </div>
    </td>
    </tr>
    <tr>
    <td height="26">
    <div align="right">
    Immagine Originale:
    </div>
    </td>
    <td>
    <div align="left">
    <input name="allegato" type="file" id="allegato" maxlength="300000">
    </div>
    </td>
    </tr>
    <tr>
    <td height="26">
    <div align="right">
    Immagine Modificata:
    </div>
    </td>
    <td>
    <div align="left">
    <input name="allegato" type="file" id="allegato" maxlength="300000">
    </div>
    </td>
    </tr>
    <tr>
    <td>
    <div align="center">
    </div>
    </td>
    <td>
    <div align="left">
    <input name="Invia" type="submit" id="Invia" value="Invia Fotomontaggio">
    </div>
    </td>
    </tr>
    </table>
    </table>
    </td></tr>
    </table>
    </td>
    invia.php

    Codice PHP:
    ?php
    $to
    = "tuamail@tuohost.it";
    $subject = "Fotomontaggio $marca $modello da $nick";
    // RENDIAMO LO SCRIPT COMPATIBILE CON LE VERSIONI DI PHP < 4.1.0
    if(!isset($_POST)) $_POST = $HTTP_POST_VARS;
    if(!isset(
    $_FILES)) $_FILES = $HTTP_POST_FILES;
    // RIPULIAMO I VARI CAMPI DEL MODULO
    $nick = trim(stripslashes($_POST["nick"]));
    $marca = trim(stripslashes($_POST["marca"]));
    $modello = trim(stripslashes($_POST["modello"]));
    // ASSEGNIAMO A VARIABILI PIU' LEGGIBILI, LE PROPRIETA' DELL'ALLEGATO
    $attach = $_FILES["allegato"]["tmp_name"];
    $file_name = $_FILES["allegato"]["name"];
    $file_type = $_FILES["allegato"]["type"];
    $file_size = $_FILES["allegato"]["size"];
    // DELIMITATORE
    $boundary = md5(uniqid(microtime()));
    // APRIAMO L'ALLEGATO PER LEGGERLO E CODIFICARLO
    $file = @fopen($attach, "r");
    $contents = @fread($file, $file_size);
    $encoded_attach = chunk_split(base64_encode($contents));
    @
    fclose($file);
    // INTESTAZIONI DELLA MAIL
    $mail_headers = "From: ";
    $mail_headers .= "MIME-version: 1.0";
    $mail_headers .= "Content-type: multipart/mixed; boundary="$boundary"";
    $mail_headers .= "X-attachments: $file_name";
    // COSTRUIAMO IL CORPO DELLA MAIL
    $mail_body = "--$boundary
    "
    ;
    $mail_body .= "Content-Type: text/plain; charset=us-ascii
    "
    ;
    $mail_body .= "Content-Transfer-Encoding: 7bit
    "
    ;
    $mail_body .= "$nick
    "
    ;
    $mail_body .= "Fotomontaggio: $marca
    "
    ;
    $mail_body .= "Modello: $modello
    "
    ;
    $mail_body .= "--$boundary
    "
    ;
    $mail_body .= "Content-type: $file_type; name="$file_name"
    "
    ;
    $mail_body .= "Content-Transfer-Encoding: base64
    "
    ;
    $mail_body .= "$encoded_attach
    "
    ;
    $mail_body .= "--$boundary--
    "
    ;

    // INVIO DELLA MAIL
    if(@mail($to, $subject, $mail_body, $mail_headers)) { // SE
    L'INVIO È ANDATO A BUON FINE...
    echo "La mail è stata inoltrata con successo.";
    mail($_POST["mail"],$subject, $mail_body, $mail_headers);
    } else {// ALTRIMENTI...
    echo "Si sono verificati dei problemi nell'
    invio della mail.";
    echo "
    <a href='upload.php'>riprova</a>";
    }
    ?>

  2. #2
    Guest

    Predefinito

    Guardando molto velocemente il programma, la cosa che mi lascia perplesso è la definizione del content type dell'allegato, nel senso che non devi dire nella mail che tipo di file è in quanto tu fai (giustamente) una conversione con base64_encode per cui il tuo allegato non è altro che una serie di "pacchetti" (chunk_split) messi uno dietro l'altro che non corrisponsono più al tuo tipo originale.
    In virtù di questo, dovresti modificare questa riga:
    Codice PHP:
    $mail_body .= "Content-type: $file_type; name="$file_name"
    "
    con questa riga:
    Codice PHP:
    $mail_body .= "Content-type:application/octet-stream; name=$file_name\r\n";
    Non ho letto bene tutto il tuo codice (passaggio di variabili e altro) per cui è probabile che tu possa avere anche altri problemi, eventualmente puoi dare un'occhiata qua

    Ciao
    Ultima modifica di golfox : 10-11-2006 alle ore 11.55.39

  3. #3
    Guest

    Predefinito

    non funziona comunque..
    mi da questo nell'email:

    Codice:
    Return-Path: <webserver@aruba.it>
    Delivered-To: vtgallery@streetuningclub.it
    Received: (qmail 27721 invoked by uid 89); 10 Nov 2006 11:57:31 -0000
    Received: by simscan 1.2.0 ppid: 27603, pid: 27628, t: 0.4874s
    scanners: clamav: 0.88.4/m:40/d:1722 spam: 3.1.4
    Received: from unknown (HELO smtpsmart2.aruba.it) (62.149.158.22)
    by mxavas4.fe.aruba.it with SMTP; 10 Nov 2006 11:57:31 -0000
    Received: (qmail 9770 invoked by uid 89); 10 Nov 2006 11:57:31 -0000
    Received: from unknown (HELO webs227.aruba.it) (62.149.130.237)
    by smtpsmart2.fe.aruba.it with SMTP; 10 Nov 2006 11:57:31 -0000
    Received: from WEBS227 ([127.0.0.1]) by webs227.aruba.it with Microsoft SMTPSVC(6.0.3790.1830);
    Fri, 10 Nov 2006 12:57:33 +0100
    Date: Fri, 10 Nov 2006 12:57:33 +0100
    Subject: Fotomontaggio asd asd da
    To: vtgallery@streetuningclub.it
    From: MIME-version: 1.0Content-type: multipart/mixed; boundary=a2a76e09b7a9d82e3d44c99ed11c031aX-attachments: brera_vt.jpg
    Return-Path: webserver@aruba.it
    Message-ID: <WEBS227EXUIEAOeIiGX0000000b@webs227.aruba.it>
    X-OriginalArrivalTime: 10 Nov 2006 11:57:33.0702 (UTC) FILETIME=[68369260:01C704BF]
    X-Spam-Rating: smtpsmart2.fe.aruba.it 1.6.2 0/0/N
    X-Spam-Rating: mxavas4.fe.aruba.it 1.6.2 0/1000/N
    
    --a2a76e09b7a9d82e3d44c99ed11c031a
    Content-Type: text/plain; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    
    Fotomontaggio: asd
    Modello: asd
    --a2a76e09b7a9d82e3d44c99ed11c031a
    Content-type:application/octet-stream; name=brera_vt.jpg
    
    Content-Transfer-Encoding: base64
    /9j/4AAQSkZJRgABAgEASABIAAD/4RrJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
    AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp
    AAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBXaW5kb3dz
    ADIwMDY6MDg6MDIgMTY6NDY6NTAAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAAEAKADAAQAAAAB
    AAADAAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEA
    AgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABmTAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklG
    AAECAABIAEgAAP/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBEL
    CgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsN
    Dg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
    DAwM/8AAEQgAeACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYH
    CAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQh
    EjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXi
    ZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIE
    BAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKy
    gwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dX
    Z3eHl6e3x//aAAwDAQACEQMRAD8A7ff5pb9OUDjhN+KPCjibAelvQJJ8k28cE6/FLhVxNnekHnxV
    bdHJ/FL1PApcCuNtF6W9Vt/mnDye6XArjbG9RJnugl/mo7gkIqMk50GhTixp0cBPiq+7smJHcSO4
    PB8keFHEmNrZO0/1dCS7Xa7Y1gP6Nv8Ap3/ot6i3JqsEsduHipZPU8MtdW5zqmVgNLXEuLn7g2um
    ptm/dus2fp/T/wDC9uxYvQvRrwK6q8pmW1sb8hg9nuBhzPe5zvf7Nns/4xRDLjoni0juf3f7y8xn

  4. #4
    Guest

    Predefinito

    Beh, dalla risposta noto che un'altra cosa che "costruisci" male è questa riga:
    From: MIME-version: 1.0Content-type: multipart/mixed; boundary=a2a76e09b7a9d82e3d44c99ed11c031aX-attachments: brera_vt.jpg
    Manda a capo e riprova....


    Ciao

  5. #5
    Guest

    Predefinito

    ok funziona ora!!
    ma come faccio a inviarne 2 di allegati?
    questo e lo script.. il primo allegato si kiama file l'altro si kiama file2

    Codice PHP:
    <?
    $to
    = "vtgallery@streetuningclub.it";
    $subject = "Fotomontaggio $marca $modello da $nick";

    # MEMORIZZIAMO NELLA VARIABILE $file_content IL CONTENUTO DEL FILE
    $file_content = $_FILES['file']['tmp_name'];
    $file_name = $_FILES['file']['name'];
    $file_type = $_FILES['file']['type'];
    $file_size = $_FILES['file']['size'];

    if (
    $file_size <= 300000){ ## se l'attach è al max 300 kbyte allora spedisco

    #### imposto l'email e la spedisco ####
    $mail_boundary = md5(uniqid(time()));
    $mail_headers .= "X-Priority: 1 (Highest)\n";
    $mail_headers .= "MIME-Version: 1.0\r\n";
    $mail_headers .= "Content-type: multipart/mixed; boundary=\"$mail_boundary\"";
    $mail_headers .= "\r\n\r\n";
    $mail_headers .= "This is a multi-part message in MIME format. ";
    $mail_headers .= "\r\n\r\n";
    #$mail_headers .= "X-Mailer: PHP/" . phpversion();

    $file = fread(fopen($file_content, "r"), $file_size);
    $file = chunk_split(base64_encode($file));

    $mail_body = "--$mail_boundary\n";
    $mail_body .= "Content-type:text/plain; charset=US-ASCII\r\n";
    $mail_body .= "Content-transfer-encoding:8 bit\r\n\r\n";
    $mail_body .= "Ricevuto da: $nick\n\n\n\n";
    $mail_body .= "Fotomontaggio: $marca\n\n\n\n";
    $mail_body .= "Modello: $modello\n\n\n\n";
    $mail_body .= "--$mail_boundary\n";
    $filename = basename($file_name);
    $mail_body .= "Content-type:application/octet-stream; name=$filename\r\n";
    $mail_body .= "Content-transfer-encoding:base64\r\n\r\n";
    $mail_body .= $file. "\r\n\r\n";
    $mail_body .= "--$mail_boundary--\r\n";
    $ris = mail("$to", $subject, $mail_body, $mail_headers);
    if (
    $ris){
    print
    "
    <div align=\"center\">
    <h2>Fotomontaggio
    $marca $modello è stato inviato con successo!</h2>
    </div>"
    ;
    }
    else {
    print
    "
    <div align=\"center\">
    <h2>Il Fotomontaggio NON &egrave; stato spedito!</h2>
    </div>"
    ;
    }
    }
    else {
    ## se l'attach supera i 300 kbyte allora NON spedisco
    print "
    <div align=\"center\">
    <h2> Errore Fotomontaggio &egrave; maggiore di 300 kByte!</h2>
    </div>"
    ;
    }
    ?>

  6. #6
    Guest

    Predefinito

    devi dividerli con il boundary: guida qui

    fammi sapere

  7. #7
    Guest

    Predefinito

    scusami tanto ma non ci sono riuscito.. :(
    mi potresti aiutare scrivendomelo?


    EDIT: ok raga. ci ho provato..
    Codice PHP:
    <?
    $to
    = "vtgallery@streetuningclub.it";
    $subject = "Fotomontaggio $marca $modello da $nick";

    # MEMORIZZIAMO NELLA VARIABILE $file_content IL CONTENUTO DEL FILE
    $file_content = $_FILES['file']['tmp_name'];
    $file_name = $_FILES['file']['name'];
    $file_type = $_FILES['file']['type'];
    $file_size = $_FILES['file']['size'];

    # QUI CI SONO I DATI RELATIVI AL SECONDO FILE
    $file2_content = $_FILES['file2']['tmp_name'];
    $file2_name = $_FILES['file2']['name'];
    $file2_type = $_FILES['file2']['type'];
    $file2_size = $_FILES['file2']['size'];

    if (
    $file_size <= 300000 && $file2_size <= 300000){ ## se l'attach è al max 300 kbyte allora spedisco

    #### imposto l'email e la spedisco ####
    $mail_boundary = md5(uniqid(time()));
    $mail_headers .= "X-Priority: 1 (Highest)\n";
    $mail_headers .= "MIME-Version: 1.0\r\n";
    $mail_headers .= "Content-type: multipart/mixed; boundary=\"$mail_boundary\"";
    $mail_headers .= "\r\n\r\n";
    $mail_headers .= "This is a multi-part message in MIME format. ";
    $mail_headers .= "\r\n\r\n";
    #$mail_headers .= "X-Mailer: PHP/" . phpversion();

    # PRIMO FILE et SECONDO FILE
    $file = fread(fopen($file_content, "r"), $file_size);
    $file = chunk_split(base64_encode($file));
    $file2 = fread(fopen($file2_content, "r"), $file2_size);
    $file2 = chunk_split(base64_encode($file2));

    $mail_body = "--$mail_boundary\n";
    $mail_body .= "Content-type:text/plain; charset=US-ASCII\r\n";
    $mail_body .= "Content-transfer-encoding:8 bit\r\n\r\n";
    $mail_body .= "Ricevuto da: $nick\n\n\n\n";
    $mail_body .= "Fotomontaggio: $marca\n\n\n\n";
    $mail_body .= "Modello: $modello\n\n\n\n";
    $mail_body .= "--$mail_boundary\n";
    $filename = basename($file_name);
    $filename = basename($file2_name);
    $mail_body .= "Content-type:application/octet-stream; name=$filename\r\n";
    $mail_body .= "Content-transfer-encoding:base64\r\n\r\n";
    $mail_body .= $file. "\r\n\r\n";
    $mail_body .= $file2. "\r\n\r\n";
    $mail_body .= "--$mail_boundary--\r\n";




    $ris = mail("$to", $subject, $mail_body, $mail_headers);
    if (
    $ris){
    print
    "
    <div align=\"center\">
    <h2>Fotomontaggio
    $marca $modello è stato inviato con successo!</h2>
    </div>"
    ;
    }
    else {
    print
    "
    <div align=\"center\">
    <h2>Il Fotomontaggio NON &egrave; stato spedito!</h2>
    </div>"
    ;
    }
    }
    else {
    ## se l'attach supera i 300 kbyte allora NON spedisco
    print "
    <div align=\"center\">
    <h2> Errore Fotomontaggio &egrave; maggiore di 300 kByte!</h2>
    </div>"
    ;
    }
    ?>
    mi arriva solo un allegato.. :( il secondo no.. ki mi aiuta?


    FunCool: Non scrivere due messaggi consecutivi, utilizza il tasto Edita.
    Ultima modifica di funcool : 14-11-2006 alle ore 13.24.45

  8. #8
    Guest

    Predefinito

    Come hai fatto tu non può andare perché riassegni la variabile $filename e poi ci metti dentro i contenuti dei due file allegati ($file, $file2).

    Il suggerimento di demenziale è quello di dividere gli allegati con il boundary, quindi dovresti duplicare questa parte
    Codice PHP:
    $mail_body .= "--$mail_boundary\n";
    $filename = basename($file_name);
    $filename = basename($file2_name);
    $mail_body .= "Content-type:application/octet-stream; name=$filename\r\n";
    $mail_body .= "Content-transfer-encoding:base64\r\n\r\n";
    $mail_body .= $file. "\r\n\r\n";
    $mail_body .= $file2. "\r\n\r\n";
    $mail_body .= "--$mail_boundary--\r\n";
    "dedicando" ad ogni boundary un solo file.

    Ciao

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •