Page 1 sur 1

Pièce jointe des demandeurs

Posté : ven. 22 août 2014 12:40
par It-Service
Bonjour,

Je me permet de vous écrire car j'ai cherché une solution à mon problème sur le forum mais je n'ai rien trouvé.
Effectivement, j'ai mis en place GestSup depuis un moment pour effectuer des tests, je viens de constater que les demandeurs nous envoyait des mails concernant leurs demandes avec des pièces jointes.
Ces pièces jointes, je ne les retrouve pas dans le ticket. Je voulais savoir s'il s'agissait d'un problème de configuration ou si le logiciel ne le permettait pas ?
Par contre, lorsque j'upload un fichier dans un ticket, je le retrouve bien par la suite. S'il s'agit d'un problème de configuration, pouvez-vous m'indiquer la marche à suivre pour remédier à ce problème ? Cela fait plusieurs heures que je recherche une solution pour résoudre ce problème en vain.

En attente de votre réponse,

Alexandre

Re: Pièce jointe des demandeurs

Posté : dim. 1 févr. 2015 12:03
par GMo
Bonjour,

Je viens de modifier mail2ticket.php

Si vous voulez vous en insprirer (attention, il y a d'autres modifs dedans ..)
Pour la récupération des pièces jointes : ligne 43 : fonctione extract_attachments
et ligne 171

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
$qparameters = mysql_query("SELECT * FROM `tparameters`"); 
$rparameters= mysql_fetch_array($qparameters);

//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("{xxxxxxxxx/imap/novalidate-cert}",$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>';
?>

Re: Pièce jointe des demandeurs

Posté : jeu. 2 avr. 2015 12:28
par WIKIWEB
Bonjour,

tout d'abord merci pour ce partage.
est ce qu'il y a une modification à faire autre sur le chmod des dossiers car la pièce jointe est indiqué dans le ticket, mais elle n'est pas présente sur le serveur.

Egalement, j'ai remarqué que dans votre fichier, le compte utilisateur de créé en automatique.

est ce qu'il y a un moyen d'envoyer automatiquement un mot de passe et le login à l'utilisateur à ce moment là ?

merci de votre aide.

Re: Pièce jointe des demandeurs

Posté : jeu. 16 avr. 2015 17:23
par ServiceInfo-Guesneau
Bonjour,

Merci GMo pour le partage cependant lorsque j’exécute le fichier via le planificateur de tâche, la p-j ne s'enregistre pas dans le dossier upload (le dossier "N° de ticket" ne ce crée pas) alors que quand je passe par l'interface Web (Administration > Paramètres > Connecteurs > "Lancer la récupération de messages") la p-j s'enregistre bien dans upload (dans le dossier bon dossier)

Pour Info : j’exécute le tâche avec les autorisations maximales.

Merci pour ton aide

Re: Pièce jointe des demandeurs

Posté : jeu. 16 avr. 2015 18:32
par WIKIWEB
ServiceInfo-Guesneau a écrit :Bonjour,

Merci GMo pour le partage cependant lorsque j’exécute le fichier via le planificateur de tâche, la p-j ne s'enregistre pas dans le dossier upload (le dossier "N° de ticket" ne ce crée pas) alors que quand je passe par l'interface Web (Administration > Paramètres > Connecteurs > "Lancer la récupération de messages") la p-j s'enregistre bien dans upload (dans le dossier bon dossier)

Pour Info : j’exécute le tâche avec les autorisations maximales.

Merci pour ton aide
Bonjour,

c'est un problème d'installation de gestsup, j'ai le même problème deux fois sur 3 install différentes.

Re: Pièce jointe des demandeurs

Posté : jeu. 25 juin 2015 17:17
par lebourgeois
Bonjour,

c'est un peu tard peut être ; c'est un problème de droits sur le répertoire "upload".
J'en ai un peu galéré ;

il fat attribué les droits 777 au répertoire "upload" afin que l'applicatif puisse écriture dans le répertoire.

Aucune modification n'a été faite sur le code.

ça pourra aider bcp j'en suis sûr.

Pour faire plus simple , j'ai donné les droits 777 à tous mes fichiers et répertoire pour ne avoir de surprise plus tard.

Re: Pièce jointe des demandeurs

Posté : ven. 26 juin 2015 09:15
par ServiceInfo-Guesneau
lebourgeois a écrit :Bonjour,

c'est un peu tard peut être ; c'est un problème de droits sur le répertoire "upload".
J'en ai un peu galéré ;

il fat attribué les droits 777 au répertoire "upload" afin que l'applicatif puisse écriture dans le répertoire.

Aucune modification n'a été faite sur le code.

ça pourra aider bcp j'en suis sûr.

Pour faire plus simple , j'ai donné les droits 777 à tous mes fichiers et répertoire pour ne avoir de surprise plus tard.
Merci pour la réponse, sauf que je suis sur un environnement Windows. Même en donnant tous les droits au groupe "Tout le monde" cela ne fonctionne pas. dommage
Solution de contournement : j’exécute mon script php dans un navigateur