Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Feb 2012
    Messaggi
    45

    upload file tramite mail

    ciao a tutti, vi spiego il mio problema, ho la necessità tramite php di leggere la posta in arrivo, prendere gli allegati copiarli in una directory e infine inserire mittente in una tabella mysql. so fare l'upload con php inserire i dati in mysql e leggere le mail di un account con php ma non so come fare a leggere gli allegati e copiarli nella cartella. inoltre il mio hosting permette il cronjob ogni minuto e quindi con quello posso far eseguire lo script
    come posso fare quindi a prendere l'allegato dalla mail e copiarlo?
    per leggere le mail uso questo script:
    Codice PHP:
    <?
    $pop3
    ="pop3.dominio.com";
    $username="user@dominio.com";
    $password="password";
    if(
    $inbox=@imap_open("{".$pop3."/pop3:110}INBOX"$username$password)){ 

        
    $messaggi_totali=imap_num_msg($inbox);
        echo 
    "[b]Totale messaggi:[/b] $messaggi_totali

    "
    ;

        for(
    $m=$messaggi_totali$m>0$m--){
            
    $headers=imap_header($inbox$m);
             
            
    $mittente$headers->fromaddress
            
    $oggetto=$headers->subject;
            
    $data=date("j/n/Y G:i:s",strtotime($headers->date));

            echo 
    "[b]Mittente:[/b] $mittente
    "
    ;
            echo 
    "[b]Oggetto:[/b] $oggetto
    "
    ;
            echo 
    "[b]Data:[/b] $data

    "
    ;
        }
    }
    imap_close($inbox);
    ?>
    grazie a tutti in anticipo

  2. #2
    Utente bannato
    Registrato dal
    Feb 2012
    Messaggi
    45
    nessuno?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Mi sono documentato un po'.

    In pratica non esiste nessuna via semplice per prendere gli allegati dalle e-mail via php, ma ho trovato questa cosa che ti potrebbe tornare utile:

    Codice PHP:
    $attachments = array();
    if(isset(
    $structure->parts) && count($structure->parts)) {

        for(
    $i 0$i count($structure->parts); $i++) {

            
    $attachments[$i] = array(
                
    'is_attachment' => false,
                
    'filename' => '',
                
    'name' => '',
                
    'attachment' => ''
            
    );
            
            if(
    $structure->parts[$i]->ifdparameters) {
                foreach(
    $structure->parts[$i]->dparameters as $object) {
                    if(
    strtolower($object->attribute) == 'filename') {
                        
    $attachments[$i]['is_attachment'] = true;
                        
    $attachments[$i]['filename'] = $object->value;
                    }
                }
            }
            
            if(
    $structure->parts[$i]->ifparameters) {
                foreach(
    $structure->parts[$i]->parameters as $object) {
                    if(
    strtolower($object->attribute) == 'name') {
                        
    $attachments[$i]['is_attachment'] = true;
                        
    $attachments[$i]['name'] = $object->value;
                    }
                }
            }
            
            if(
    $attachments[$i]['is_attachment']) {
                
    $attachments[$i]['attachment'] = imap_fetchbody($connection$message_number$i+1);
                if(
    $structure->parts[$i]->encoding == 3) { // 3 = BASE64
                    
    $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                }
                elseif(
    $structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
                    
    $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                }
            }
        }

    In pratica questo codice genererà un array di questo tipo:

    codice:
    Array
    (
        [0] => Array
            (
                [is_attachment] => 
                [filename] => 
                [name] => 
                [attachment] => 
            )
    
        [1] => Array
            (
                [is_attachment] => 1
                [filename] => Analytics_www.electrictoolbox.com_20090108-20090207.tsv
                [name] => Analytics_www.electrictoolbox.com_20090108-20090207.tsv
                [attachment] => ...
            )
    
    )
    Avendo questo devi utilizzare un foreach nell'array $attachments che controlla se is_attachment è 1 (potrebbe capitare che è un allegato fasullo), e poi fai quello che vuoi con il [filename], il [name] e [attachment]. I primi due ti servono per il nome, il terzo invece è proprio l'allegato come stringa.

    Spero ti sia stato d'aiuto,

  4. #4
    Utente bannato
    Registrato dal
    Feb 2012
    Messaggi
    45
    grazie simo22, sei stato molto utile, appena riesco lo adatto lo provo e ti faccio sapere.
    grazie ancora

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.