Script copie de fichiers et envoi de mails

dida44
Invité n'ayant pas de compte PHPfrance

31 oct. 2013, 11:58

Bonjour à tous,

Voila mon soucis :
J'ai un script PHP qui copie des pièces jointes dans un dossier. Le script fonctionne très bien lorsqu'il est lancé dans un navigateur, par contre lorsqu'il est lancé à partir d'une tâche planifiée Windows, il s'exécute bien mais ne fait pas la copie de fichiers....

Autre soucis, comment récupérer dans le mail envoyé, tous les noms des pièces jointes copiées. (problème au niveau du $msg ligne 169)

Ci-dessous mon code en espérant que vous puissiez m'aider.
Merci d'avance à vous tous.

<?php
 
function getFileExtension($fileName){
   $parts=explode(".",$fileName);
   return $parts[count($parts)-1];
}
 
 
  // Connexion sur le boîte mail
	$server = '{192.168.75.4:143/novalidate-cert}_Test';
	$username = 'user';
	$password = 'motdepasse';
 
 
 
 
	$imap = imap_open($server, $username, $password) or die("imap connection error");
 
$message_count = imap_num_msg($imap);
for ($m = 1; $m <= $message_count; ++$m){
 
    $header = imap_header($imap, $m);
 
    $email[$m]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
    $email[$m]['fromaddress'] = $header->from[0]->personal;
    $email[$m]['to'] = $header->to[0]->mailbox;
    $email[$m]['subject'] = $header->subject;
    $email[$m]['message_id'] = $header->message_id;
    $email[$m]['date'] = $header->udate;
 
    $from = $email[$m]['fromaddress'];
    $from_email = $email[$m]['from'];
    $to = $email[$m]['to'];
    $subject = $email[$m]['subject'];
 
    echo $from_email . '</br>';
    echo $to . '</br>';
    echo $subject . '</br>';
 
    $structure = imap_fetchstructure($imap, $m);
 
    $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($imap, $m, $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']);
                }
            }
        }
    }
 
 
	if(count($attachments)!=0){
		foreach ($attachments as $key){
			if($key['is_attachment']==1){
	file_put_contents($key['filename'], $key['attachment']);
 
}
}
}
}
 
 
  // Copy des pièces jointes dans le dossier ou est lancé le script
 function recurse_copy($src,$dst) {  
 
    $dir = opendir($src);   
     @mkdir($dst);   
 
     while(false !== ( $file = readdir($dir)) ) {   
 
         if (( $file != '.' ) && ( $file != '..' )) {   
 
            if ( is_dir($src . '/' . $file) ) {   
 
                 recurse_copy($src . '/' . $file,$dst . '/' . $file);   
 
             }   
 
             else {   
 
                 copy($src . '/' . $file,$dst . '/' . $file);   
 
            }   
 
         }   
 
     }   
 
     closedir($dir);   
 
 }  
 
 
 // Copie des fichiers vers mon pc
 // Repertoire source
 $src = "C:/Program Files (x86)/OCS Inventory NG/xampp/htdocs/Script_Fourn2/";  
 
 // Repertoire de destination 
  $dst = "//MonPC/Partage/_AZ"; 
 
 recurse_copy($src,$dst); 
 
 
 
 
 	// Suppression du fichier php
unlink("//MonPC/Partage/_AZ/Move_Attachments_Test2.php");
 
 
	// Test du répertoire //MonPC/Partage/_AZ/ si vide ou non
 $OK=99;
$dir = ("//Didier-d/Partage/_AZ");
if (is_dir($dir)) 
{
 if ($Pointeur = opendir($dir)) 
  {
   while (($file = readdir($Pointeur)) !== false) 
      {
       if ($file!="." && $file!=".." ) $OK=0;
       if ($file=="." || $file==".." ) $OK=1;
       }
   closedir($Pointeur);
  }
}
	// if( $OK==0) echo ("Le répertoire n'est pas vide");
	// if( $OK==99) echo ("Le répertoire n'existe pas");
	// if( $OK==1) echo ("Le répertoire existe et est vide");
if ( $OK==1)
	{
echo ("...Le répertoire $dir existe et est vide...");
	}
else
	{
	$to = '[email protected], [email protected]';
	$subject = 'Copie des pièces jointes fournisseurs';
	$msg = 'Nom de la pièce jointe déplacée :   '   . $key['filename'] .'';
	$headers = "From: Didier Dalcantara <[email protected]>\r\n";
	mail($to, $subject,$msg, $headers);
	}
 
 
	// Copie des fichiers du repertoire _AZ vers _AZ2	
	$src2 = "//MonPC/Partage/_AZ";   
    $dst2 = "//MonPC/Partage/_AZ2"; 
 
 
 recurse_copy($src2,$dst2);
 
 
	// Suppression des fichiers contenu dans le répertoire _AZ
		$dir2 = "//MonPC/Partage/_AZ";
function unlinkRecursive($dir2, $deleteRootToo) 
{ 
    if(!$dh = @opendir($dir2)) 
    { 
        return; 
    } 
    while (false !== ($obj = readdir($dh))) 
    { 
        if($obj == '.' || $obj == '..') 
        { 
            continue; 
        }  
 
        if (!@unlink($dir2 . '/' . $obj)) 
        { 
            unlinkRecursive($dir2.'/'.$obj, true); 
        } 
    }  
 
    closedir($dh);  
 
    if ($deleteRootToo) 
    { 
        @rmdir($dir2); 
    }  
 
    return; 
} 
unlinkRecursive($dir2, false); 
 
 
 
	// Suppression des fichiers dans le répertoire d'origine sauf les PHP
foreach (glob("*.pdf") as $filename)
{ 
@unlink($filename);
}
 
foreach (glob("*.xlsx") as $filename)
{
@unlink($filename);
}
 
foreach (glob("*.doc") as $filename)
{
@unlink($filename);
}
 
foreach (glob("*.xls") as $filename)
{
@unlink($filename);
}
 
foreach (glob("*.csv") as $filename)
{
@unlink($filename);
}
 
foreach (glob("*.docx") as $filename)
{
@unlink($filename);
}
 
foreach (glob("*.txt") as $filename)
{
@unlink($filename);
}
 
 
	// Déplacement des mails de INBOX vers Olds_Msgs
$nbmess = imap_num_msg($imap); 
for($j=1;$j<=$nbmess;$j++) 
{
  imap_mail_move($imap,$message_count,'_test2'); 
}
 
imap_expunge($imap);
imap_close($imap);
 
 
 
 
?>
Modifié en dernier par moogli le 01 nov. 2013, 17:16, modifié 1 fois.
Raison : bbcode php

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2013, 17:20

salut,


script trop dense pour l'analyser pour toi ;)

as tu vérifier le log de php s'il y a avait des erreurs ?

il y a de grandes chances que les fichiers ne soit pas créés la où tu le pense et que cela fasse que la copie échoue ;)


@+
Il en faut peu pour être heureux ......

dida44
Invité n'ayant pas de compte PHPfrance

04 nov. 2013, 10:47

Merci Moogli,

Je vais regarder cela de plu près.
Sinon, pour ce qui est du fait de récupérer le nom de toutes les pièces jointes dans le corps du mail, auriez-vous une idée ?

Encore merci d'avance pour votre aide.

Invité
Invité n'ayant pas de compte PHPfrance

04 nov. 2013, 16:51

Je reviens vers vous :

J'ai essayé de récupérer les noms des pièces jointes dans le corps du mail, mais sans succès.
S'il y en a une pas de problème, mais s'il y en a plusieurs, là commence la galère.......
J'ai essayé les Forums, aides et autres mais ...............je n'arrive à rien.
Au secours........................Merci