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

Décrivez les améliorations que vous souhaiteriez pour les prochaines versions.
Répondre
zmaster26
Gsup LEVEL 0
Messages : 1
Enregistré le : ven. 13 mai 2016 16:36

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
Eskignax
Gsup LEVEL 1
Messages : 22
Enregistré le : mar. 26 avr. 2016 15:30

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
GestSup: 3.1.15 | OS: Debian 8 | Apache: 2.4.10 | MySQL: 5.5.49 | PHP: 5.6.0
Eskignax
Gsup LEVEL 1
Messages : 22
Enregistré le : mar. 26 avr. 2016 15:30

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 :)
GestSup: 3.1.15 | OS: Debian 8 | Apache: 2.4.10 | MySQL: 5.5.49 | PHP: 5.6.0
Répondre