URGENT PROJET: Compression d'un dossier et envoie de l'archive par mail. En auto

Résolu
neocam Messages postés 52 Date d'inscription mercredi 28 juin 2006 Statut Membre Dernière intervention 1 mars 2010 - 26 janv. 2009 à 10:46
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 7 févr. 2009 à 22:04
Bonjour,
Je suis débutant dans l'utilisation du vbscript

J'ai déjà fouiner un peu partout et tout ce que je récupère ne fonctionne pas ...
c'est un projet trés important pour moi... vis a vis de ma nouvelle entreprise...

Donc ma question et simple, si quelque brave personne pouvait m'aider étape par étape serait exellent...

Ma premiere étape et d'arriver a lister le contenu d'un repertoire et de la ziper
Seconde insérer le zip en piece jointe dans un mail et de l'envoyer...

J'ai vraiment fouiller pendant 3 semaine il y a plein de source sur ca mais je n'arrive pas a les faire fonctionner, alors la meilleur solution et de tout reprendre moi meme... j'ai deja la tete dans les tuto... donc promi je fait tout ce que je peux ^^

Une fois fini je me ferais un plaisir de partager cette source car j'en ai trouvé vraiment aucune qui répond a mes attente, car pour résumer ce sera un script qui tourne en automatique et travail en arriére plan.

Merci par avance

13 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
26 janv. 2009 à 19:43
Pour la compression, il te suffit d'appeler 7z (téléchargeable ici) en lui donnant les arguments corrects.
Pour l'envoi par mail, fais-le via CDONTS (présent sous Windows depuis Windows 2000 si je ne me trompe pas).
3
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
27 janv. 2009 à 01:57
Bonsoir Neocam !

Juste une petite question qui me vient...
Un script (ici vbs) doit être lancé manuellement pour qu'il s'exécute, non ?
Car si c'est le cas, je ne vois pas comment il fonctionnerait automatiquement en tâche de fond... Je veux dire par là, que tu auras besoin de le relancer à chaque fois. Par contre en faisant un exe, celui-ci pourrait réellement tourner en tâche de fond et procéder aux actions lorsqu'il le faut...
Je demande confirmation (pour le scripte en tâche de fond)...

Pour ce qui est du code que tu demandes :

  - Pour énumérer les fichiers d'un répertoire, tu peux partir de ça :
  strComputer = "."
 Set objWMIService = GetObject("winmgmts:" & _
 "{impersonationLevel=impersonate}!\" & _
 strComputer & "\root\cimv2")
 Set colFiles = objWMIService.ExecQuery _
 ("Select * from CIM_DataFile where Path = 'Ton dossier'")
 For Each objFile In colFiles
     Wscript.Echo objFile.Name
 Next

  - Pour la compression :
  Comme le proposait Ghuysmans utilise 7zip, mais sa version en ligne de commande "7za"
  est suffisante pour toi, sans installation et plus légère ! Tu peux la télécharger =350&width= 300&group_id=14481&use_mirror=surfnet&filesize=&filename=7za464.zip&abmode= ici

  Voici deux lignes de commandes que tu peux utiliser (au choix) :
  7za.exe a "NomArchive.7z" "PathDuDossier"
 7za.exe a -t7z "NomArchive.7z" "PathDuDossier" -mx=9

  - Pour l'envoi de ton archive par e-mail :
 
With CreateObject("CDO.Message")

     .From = "TonAdresse@domaine.fr"
     .To=  "AdresseDestinataire@domaine.fr"
     .Subject= "Sujet du mail"
     .TextBody= "Texte du mail"
     'Path de l'archive à envoyer en pièce jointe :
     .AddAttachment("C:\TonArchive.7z")

     .Configuration.Fields.Item( _
     "http://schemas.microsoft.com/cdo/configuration/sendusing")=  2
     'Adresse de ton serveur SMTP :
     .Configuration.Fields.Item( _
     "http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
     "TonServeurSMTP"

     ' Voici quelque adresses de serveurs SMTP...
     ' - 9Online :       smtp.9online.fr
     ' - Alice :         smtp.alice.fr , smtp.aliceadsl.fr
     ' - AOL :           smtp.fr.aol.com
     ' - Caramail :      smtp.lycos.co.uk
     ' - Cegetel :       smtp.cegetel.net
     ' - Club-Internet : mail.club-internet.fr
     ' - DartyBox :      smtpauth.dbmail.com
     ' - Free :          smtp.free.fr
     ' - FreeSurf :      smtp.freesurf.fr
     ' - Gmail :         smtp.gmail.com
     ' - IFrance :       smtp.ifrance.com
     ' - Laposte :       smtp.laposte.net
     ' - Neuf :          smtp.neuf.fr
     ' - Noos :          smtp.noos.fr
     ' - Orange :        smtp.orange.fr
     ' - Tele2 :         smtp.tele2.fr
     ' - Tiscali :       smtp.tiscali.fr
     ' - Wanadoo :       smtp.wanadoo.fr

     'Port d'envoi (en général c'est le port 25) :
     .Configuration.Fields.Item( _
     "http://schemas.microsoft.com/cdo/configuration"& _
     "/smtpserverport")=25
     .Configuration.Fields.Update

     On Error Resume Next
     .Send

     'Affiche le resultat de l'opération, mais si tu veux que tout
     'soit silencieux enlève ce bloc If...
     If Err Then
         MsgBox "Votre message n'a pas pu être expédié.", _
         VbInformation + VbOkOnly + VbApplicationModal + 0,"Info"
     Else
         MsgBox "Votre mail a été envoyé avec succès !", _
         VbInformation + VbOkOnly + VbApplicationModal + 0,"Info"
     End If

End With

Voilà, je pense que cela est un bon point de départ, presque tout t'est donné !
Bonne prog ++
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 janv. 2009 à 19:30
Reçois-tu une erreur ? Est-ce l'anti-spam qui massacre ton message ?
3
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
1 févr. 2009 à 22:51
Re-Salut Neocam !

Bah alors ça marche pô pour le mail...?

J'ai regardé ton bout de code et j'ai noté quelque chose qui me parait étrange, l'adresse de ton serveur SMTP... Je crois que tu as mis ton IP LAN (Je suis pas connaisseur à 100% sur les config de ce type ainsi que les possibilités offertes, mais je ne pense pas que cela soit une valeur attendue, si ?). Si tu penses que cela puisse être la cause, tente de mettre l'adresse du serveur SMTP de ton FAI (je t'ai donné une liste des adresses de serveurs SMTP...)

- Par exemple si ton FAI est Wanadoo :

'Nom du serveur SMTP

objMail.Configuration.Fields.Item _

("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.wanadoo.fr"

Sinon vérifie que ton FireWall bloque pas Wscript ou Cscript ou le port 25 pour tous les prog (Cette dernière m'étonnerais un peu quand même !)

Tiens nous au courant !
Bonne prog
++

 
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
1 févr. 2009 à 23:00
Re...    Juste une petite précision.

Pour vérifier l'état de ta commande (si cela a fonctionné ou pas), je t'avais mis un bloc If facultatif dans le code d'envoi qui se chargeait justement de cette tâche. Tu peux donc essayer de le remettre pour voir...


'Affiche le resultat de l'opération, mais si tu veux que tout




soit silencieux enlève ce bloc If...






If Err Then
    MsgBox "Votre message n'a pas pu être expédié.", _
    VbInformation



+



VbOkOnly + VbApplicationModal + 0,"Info"
Else
    MsgBox "Votre mail a été envoyé avec succès !", _
    VbInformation + VbOkOnly + VbApplicationModal + 0,"Info"
End If

Voilà c'était juste pour info...
++
3
neocam Messages postés 52 Date d'inscription mercredi 28 juin 2006 Statut Membre Dernière intervention 1 mars 2010
28 janv. 2009 à 11:39
Merci beaucoup pour cette aide.

Oui je souhaité le faire tourner automatiquement sur un serveur, je comptai mettre mon script dans le planificateur des taches maintenant si la boite de dialogue s'affiche ce n'était pas exceptionnellement grave, mais c'est sur après lecture de ton idée ca serait peut etre plus performant de le faire tourner en tache de fond...
Donc je vais me tourner vers ton code mais bon mon code suivant promet de bientôt aboutir alors j'aimerais le terminer si c'est possible avec votre aide...

Je disais de mon coté j'ai programmé un code qui permet de zipper un dossier (mais il ne faut pas que le dossier contienne des dossiers vides) vers une archive.zip (il faut que l'archive sot déjà créé a l'avance)
Et de l'envoyer en mail grâce au serveur exchange...
Mais l'envoie de mail ne fonctionne pas....

Mon code :
Option Explicit

Const ForReading 1, ForWriting 2, ForAppending = 8

Dim Source, Destination, MyHex, MyBinary, i
Dim oShell, oApp, oFolder, oCTF, oFile
Dim oFileSys
Dim objMail

Source = "C:\Temp"
Destination = "C:\maSauvegarde.zip"

MyHex = _
Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

For i = 0 To UBound(MyHex)
    MyBinary = MyBinary & Chr(MyHex(i))
Next

Set oShell = CreateObject("WScript.Shell")
Set oFileSys = CreateObject("Scripting.FileSystemObject")

'Creation du zip
Set oCTF = oFileSys.CreateTextFile(Destination, True)
oCTF.Write MyBinary
oCTF.Close
Set oCTF = Nothing

Set oApp = CreateObject("Shell.Application")

Set oFolder = oApp.NameSpace(Source)



If Not oFolder Is Nothing Then _
    oApp.NameSpace(Destination).CopyHere oFolder.Items

wScript.Sleep 5000

Set oFile = Nothing

//Partie mail qui ne foctionne pas
Set objMail = CreateObject("CDO.Message") 

objMail.Subject = "Projet envoi de mail"
objMail.Sender = "csauvage@leader.com"
objMail.To = "csauvage@leader.com"
objMail.TextBody = "Projet envoi de mail"
objMail.addattachment "c:\maSauvegarde.zip"



'Nom du serveur SMTP 
objMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.1.57"

objMail.Send 

0
neocam Messages postés 52 Date d'inscription mercredi 28 juin 2006 Statut Membre Dernière intervention 1 mars 2010
29 janv. 2009 à 09:48
A je sais pas la tu me pose une colle ....

Mais j'avous avoir la net impression que le mail part pas, je n'ai pas de message d'erreur mais quant j'essaye de temporiser le code de cette manière.

wScript.echo "test0"
wScript.Sleep 5000
'Nom du serveur SMTP
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.1.57"
wScript.echo "test1"
wScript.Sleep 5000
objMail.Send
wScript.echo "test2"
wScript.Sleep 5000

Et je ne vois pas test2.... un message apparait mais disparait trop vite ensuite...
0
neocam Messages postés 52 Date d'inscription mercredi 28 juin 2006 Statut Membre Dernière intervention 1 mars 2010
5 févr. 2009 à 10:58
Bonjour,

Excusez moi d'avoir du mettre un peu ce projet en attente maisj'ai eu des obligation et me voilà encore plus a la bourre...

Donc j'ais apporté les modifications du serveur SMPT en entrant l'adresse de wanadoo et un autre test avec free, mais la message box me précise que le mail n'a pas été envoyé mais ne m'explique pas pourquoi...

Et sinon pour info, l'adresse IP que j'avais rentrai était l'adresse interne de serveur Exchange.

La je recherche activement la possibilité de convertir en ligne de commande un pdf en txt afin d'extraire l'adresse e-mail du destinataire de ce mail que nous somme en train d'essayer de faire partir :s

Merci beaucoup pour votre soutient
0
neocam Messages postés 52 Date d'inscription mercredi 28 juin 2006 Statut Membre Dernière intervention 1 mars 2010
5 févr. 2009 à 16:44
Re bonjour,

Bon pour la convertion du pdf en txt et l'extraction de la première ligne c'est OK, il ne me manque plus que l'envoie de mail.

J'ai tester en dehors du réseau d'entreprise mais cela ne fonctionne pas...

C'est trés stressant...

J'oublier j'execute mon script depuis windows vista, peut etre la cdo.dll qui ne serait pas bonne? car j'ai ajouter cette dll à la racine de windows
0
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
7 févr. 2009 à 18:50
Salut Neocam !

"Bon pour la convertion du pdf en txt et l'extraction de la première ligne c'est OK", je suis curieux de savoir comment, pourrais-tu me montrer ce code ?
Ca m'étonnerais pour ta dll car sinon, ton script bloquerait dès son utilisation...Je pense. Par contre, étrange que tu n'ais pas eu besoin de l'enregistrée...

Merci et bonne continuation
++
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
7 févr. 2009 à 19:01
Si l'ActiveX a été faite en VB6, elle est enregistrée dès la compilation.
0
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
7 févr. 2009 à 19:49
Salut Ghuysmans !

Bein CDO.dll vient pas de VB6 j'imagine...



++
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
7 févr. 2009 à 22:04
Euh non ... Me suis complètement planté !
Je crois qu'elle est là depuis Windows 2000 si t'as le serveur SMTP de IIS installé.
0
Rejoignez-nous