Page 1 sur 1

[Intégré 3.1.9] Pièce jointe dans email

Posté : ven. 13 mai 2016 16:46
par zmaster26
Bonjour,

Lorsqu'un utilisateur envoi un mail pour créer un ticket sa pièce jointe n'est pas visible dans le ticket
J'ai vu qu'un membre avait réaliser un développement dans la mail2ticket.php (http://gestsup.fr/forum/viewtopic.php?f=5&t=2339)
Sa version est un peu vieillote et ne s'adapte pas à la version actuelle (3.1.7)

Quelqu'un aurait-il réussi à adapter ce code ?

Merci pour votre aide; cet outil est très bien fait

Tom

Re: Pièce jointe dans email

Posté : ven. 3 juin 2016 14:29
par Eskignax
Interessé aussi par cette fonctionnalités. Les utilisateurs envoient souvent des pieces jointes ou même simplement des mail directement en Format Image dans les mail.

Cordialement

Re: Pièce jointe dans email

Posté : lun. 6 juin 2016 12:10
par Eskignax
J'ai changer certaines ligne du vieux code en les remplacant par le code mis à jour.
Voila l'idée

Code : Tout sélectionner

<?php
################################################################################
# @Name : mail2ticket.php
# @Desc : convert mail in ticket
# @call : /index_auth.php
# @paramters : 
# @Autor : Flox
# @Create : 07/04/2013
# @Update : 16/07/2014
# @Version : 3.0.10
################################################################################

//initialize counter
$count=0;

//connexion script with database parameters
require "connect.php";

//define current time
$datetime = date("Y-m-d H:i:s");

//load parameters table
$query=$db->query("SELECT * FROM tparameters");
$rparameters=$query->fetch();
$query->closeCursor();

//hostname building
//$hostname = '{'.$rparameters['imap_server'].':'.$rparameters['imap_port'].'}'.$rparameters['imap_inbox'].'';
$hostname = '{'.$rparameters['imap_server'].':'.$rparameters['imap_port'].'}'.$rparameters['imap_inbox'].'';


//connect to inbox

//default case
//$inbox = imap_open($hostname,$rparameters['imap_user'],$rparameters['imap_password']) or die('Impossible de se connecter au serveur de Messagerie: ' . imap_last_error());
//$inbox = imap_open($hostname/novalidate-cert,$rparameters['imap_user'],$rparameters['imap_password']) or die('Impossible de se connecter au serveur de Messagerie: ' . imap_last_error());
$inbox = imap_open($hostname,$rparameters['imap_user'],$rparameters['imap_password']) or die('Impossible de se connecter au serveur de Messagerie: ' . imap_last_error());


// Exchange 2010
//echo $rparameters['imap_port']  ;
//$inbox = imap_open('{'.$rparameters['imap_server'].':'.$rparameters['imap_port'].'/pop3/novalidate-cert}'.$rparameters['imap_inbox'].'', $rparameters['imap_user'], $rparameters['imap_password'],NULL,1,array('DISABLE_AUTHENTICATOR'=>'GSSAPI')) or die('Impossible de se connecter au serveur de Messagerie: ' . imap_last_error());

// Fonction attach :
function extract_attachments($connection, $message_number) {
   
    $attachments = array();
    $structure = imap_fetchstructure($connection, $message_number);
   
    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']);
                }
            }
           
        }
       
    }
   
    return $attachments;
   
}

// EOL Attach




//display header
echo'
<html lang="fr">
   <head>
      <meta charset="UTF-8" />
   </head>
';

if($inbox) 
{ 
   //grab mail
   echo "<u></u>Connexion à la boite au lettre en cours: <font color=green>ok</font><br /><br />";
   $emails = imap_search($inbox,'ALL');
    //if emails are returned
    if($emails) {
      //for every email...
      foreach($emails as $email_number) {
         //get information specific to this email
         $overview = imap_fetch_overview($inbox, $email_number, 0);
         $seen=$overview[0]->seen;
         //if message is not read
         if ($seen==0)
         {
            $count=$count+1;
            //get mail data
            $message = imap_fetchbody($inbox, $email_number, 1);
            //$fileatt = imap_fetchbody($inbox, $email_number, 2);
            $header = imap_headerinfo($inbox, $email_number);
            $subject = $overview[0] -> subject;
            $from = $header->from[0]->mailbox . "@" . $header->from[0]->host;
            
            //special char convert
            $message=quoted_printable_decode($message);
            $subject=mb_decode_mimeheader($subject);
            $subject = str_replace('_', ' ', $subject);
            
            //Escape special char to SQL query
            $message=mysql_real_escape_string($message);
            $subject=mysql_real_escape_string($subject);
         
            //find gestsup userid from mail address
            $query= mysql_query("SELECT id FROM `tusers` where mail='$from' ");
            $row=mysql_fetch_array($query);
            if($row[0])
            {
               $user_id=$row[0];
            } else {
               $user_id='';
               //add GMO : create user
                  $salt = substr(md5(uniqid(rand(), true)), 0, 5); // Generate a random key
                  $password=md5($salt . md5('xxxxxxxx')); // store in md5, md5 password + salt
                  $requete = "INSERT INTO tusers (lastname,password,salt,mail,profile,login) VALUES ('$from','$password','$salt','$from','2','$from')";
                  $execution = mysql_query($requete) or die('Erreur SQL !<br /><br />'.mysql_error());
                  $query1= mysql_query("SELECT id FROM `tusers` where mail='$from' ");
                  $row1=mysql_fetch_array($query1);
                  if($row1[0])
                     {
                        $user_id=$row1[0];
                     }
               //
               $message='De '.$from.':\n'.$message;   
            }
            
            // create ticket
            $query= "INSERT INTO tincidents 
            (user,technician,title,description,date_create,techread,state,criticality,disable) 
            VALUES
            ('$user_id','0','$subject', '$message','$datetime','0','5','4','0')";
            $exec = mysql_query($query) or die('Erreur SQL !<br />'.mysql_error());
            $id_ticket=mysql_insert_id();
            
            $attachement = extract_attachments($inbox,$email_number);
            echo $id_ticket;
            echo "&nbsp> Import du message $count: $subject: <font color=green>ok</font><br />";
            $img='0';
            foreach ($attachement as &$attachement) {
               echo $attachement['is_attachment'].'<br>';
               echo $attachement['filename'].'<br>';
               $filenameSQL=$attachement['filename'];
               if ($filenameSQL != '') {
                  echo $attachement['name'].'<br>';
                  //echo $attachement['attachment'];
                     mkdir("./upload/".$id_ticket);
                 echo 'Le répertoire ./upload/'.$id_ticket.' vient d\'être créé!<br>';      
             
                  $myfile = fopen("./upload/".$id_ticket."/".$attachement['filename'], "x");// or die("Unable to open file!");
                  fwrite($myfile, $attachement['attachment']);
                  fclose($myfile);
                  
                  //echo $filenameSQL.'<br>';
                  $imgtext='img'.$img;
                  echo $imgtext.'<br>';
                  $requete = "UPDATE tincidents SET $imgtext = '$filenameSQL' WHERE id = '$id_ticket'";
                  //$requete = "UPDATE tusers set disable=1 WHERE id = '$_GET[id]'";
                  echo $requete.'<br>';
                  $execution = mysql_query($requete) or die('Erreur SQL !<br /><br />'.mysql_error());
               }
               $img=$img+1;
            } 
            
         }
      }
   }
   imap_close($inbox);
   echo "<br />Total: Récupération de $count messages depuis <b>$rparameters[imap_server]</b> depuis le port <b>$rparameters[imap_port]</b><br />";

} else {
   echo "Erreur de connexion IMAP";
}
echo '</html>';
?>
J'obtiens finalement cette erreur :

Code : Tout sélectionner

Connexion à la boite au lettre en cours: ok

Total: Récupération de 0 messages depuis 192.168.214.136 depuis le port 143
Quelqu'un aurait il une idée? Je suis preneur ! Mes connaissance en PHP sont limitées. :oops:

Merci :)