' ---------------------------------------------------------- ' Script VBS d'envoi de mail en ligne de commande ' ' Syntaxe : ' sendmail -e -d -o -m [-s] [-p] ' sendmail /e /d /o /m [/s] [/p] ' Paramètres obligatoires : ' : adresse email de l'expéditeur ' : adresse email du destinataire ' : objet (titre) du message ' : corps du message ' Dans le cas d'un message sur plusieurs lignes, ' utiliser la séquence "\n" pour chaque retour à la ligne ' Si le message se réduit à un nom de fichier (existant), ' ce fichier sera lu et constituera le corps du message ' Paramètres facultatifs : ' : signature (peut-être un nom de fichier texte) ' : nom de fichier quelconque en pièce-jointe ' NB : les chaines et nom de fichier sont à encadrer par des guillemets ' s'ils comportent des espaces '' ' JC BELLAMY © 2002 ' ---------------------------------------------------------- Dim args, fso, f,shell Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set shell = WScript.CreateObject("WScript.Shell") Set args = Wscript.Arguments ForReading=1 nbargs=args.count defmoteur="cscript" If nbargs=0 or testarg("?") or testarg("h") Then Syntaxe "" ' Test du moteur utilisé TestHost If not testarg("e") then Syntaxe "Email expéditeur absent" If not testarg("d") then Syntaxe "Email destinataire absent" If not testarg("o") then Syntaxe "Objet absent" If not testarg("m") then Syntaxe "Message absent" Exped=getarg("e") If not IsValidEmail(Exped) Then Syntaxe "Email expéditeur invalide" Dest=getarg("d") If not IsValidEmail(Dest) Then Syntaxe "Email destinataire invalide" Objet=getarg("o") Mess=getarg("m") body=GetString(Mess) If testarg("s") Then Sign=getarg("s") body=body & VBCRLF & GetString(Sign) End If Set objEmail = CreateObject("CDO.Message") objEmail.From = Exped objEmail.To = Dest objEmail.Subject = Objet objEmail.Textbody = body If testarg("p") Then pj=getarg("p") If fso.FileExists(pj) Then objEmail.AddAttachment pj end if objEmail.Send Wscript.quit '-------------------------------------------------------------------- ' Sous programme de test du moteur Sub TestHost dim rep strFullName =lcase(WScript.FullName) strappli=lcase(Wscript.ScriptFullName) i=InStr(1,strFullName,".exe",1) j=InStrRev(strFullName,"\",i,1) strCommand=Mid(strFullName,j+1,i-j-1) if strCommand<>defmoteur then rep=MsgBox( _ "Pour faciliter l'affichage, il est recommandé" & VBCRLF & _ "de lancer ce script avec """ & defmoteur & """" & VBCRLF & _ "Cela peut être rendu permanent avec la commande" & VBCRLF & _ "cscript //H:" & defmoteur &" //S /Nologo" & VBCRLF & _ "Voulez-vous que ce soit fait automatiquement?", _ vbYesNo + vbQuestion,strappli) if rep=vbYes then nomcmd="setscript.bat" Set ficcmd = fso.CreateTextFile(nomcmd) ficcmd.writeline "@echo off" ficcmd.writeline "cscript //H:" & defmoteur & " //S /Nologo" ficcmd.writeline "pause" params="" For i = 0 To nbargs-1 params=params & " " & args(i) next ficcmd.writeline chr(34) & strappli & chr(34) & params ficcmd.writeline "pause" ficcmd.close shell.Run nomcmd, SW_SHOWNORMAL,true WScript.Quit end if end if end sub '-------------------------------------------------------------------- Sub Syntaxe(info) If info="" Then msg= "Script d'envoi de message (texte) en ligne de commande" & VBCRLF msg=msg & "JC BELLAMY © 2002" & VBCRLF Else msg="*** " & info & " ***" & VBCRLF End If msg=msg & "------------------------------------------" & VBCRLF msg=msg & "Syntaxe : " & VBCRLF msg=msg & " sendmail -e -d -o -m" & VBCRLF msg=msg & " [-s] [-p]" & VBCRLF msg=msg & " sendmail /e /d /o /m" & VBCRLF msg=msg & " [/s] [/p]" & VBCRLF msg=msg & "Paramètres obligatoires :" & VBCRLF msg=msg & " : adresse email de l'expéditeur" & VBCRLF msg=msg & " : adresse email du destinataire" & VBCRLF msg=msg & " : objet (titre) du message" & VBCRLF msg=msg & " : corps du message" & VBCRLF msg=msg & " Dans le cas d'un message sur plusieurs lignes," & VBCRLF msg=msg & " utiliser la séquence ""\n"" pour chaque retour à la ligne" & VBCRLF msg=msg & " Si le message se réduit à un nom de fichier (existant)," & VBCRLF msg=msg & " ce fichier sera lu et constituera le corps du message" & VBCRLF msg=msg & "Paramètres facultatifs :" & VBCRLF msg=msg & " : signature (peut-être un nom de fichier texte)" & VBCRLF msg=msg & " : nom de fichier quelconque en pièce-jointe" & VBCRLF msg=msg & "NB : les chaines et noms de fichier sont à encadrer par des guillemets" & VBCRLF msg=msg & " s'ils comportent des espaces" & VBCRLF & VBCRLF msg=msg & "Exemples :"& VBCRLF msg=msg & " sendmail -eJean-Claude.Bellamy@wanadoo.fr -dbillg@microsoft.com -o""About VBS""" & VBCRLF msg=msg & " -m""VBSCript is a\nvery exciting tool!"" -sJCB -pm:\bitmaps\img.gif" & VBCRLF msg=msg & " sendmail -ejc.bellamy@free.fr -dbillg@microsoft.com -o""More about VBS...""" & VBCRLF msg=msg & " -m""d:\mes documents\txt\buglist.txt"" -sm:\texte\signature.txt" & VBCRLF & VBCRLF wscript.echo msg wscript.quit End Sub '-------------------------------------------------------------------- Function IsValidEmail(str) Dim re Set re = New RegExp re.pattern = "\w+\@[.\w]+" 'Modèle du style "nnnnnn@dddddd" IsValidEmail=re.Test(str) End Function '-------------------------------------------------------------------- Function testarg(param) testarg=false For i = 0 To nbargs-1 curarg=lcase(args(i)) If left(curarg,1)="/" or left(curarg,1)="-" Then If mid(curarg,2,len(param))=param Then testarg=true exit function End If End If Next End Function '-------------------------------------------------------------------- Function getarg(param) getarg="" For i = 0 To nbargs-1 curarg=lcase(args(i)) If left(curarg,1)="/" or left(curarg,1)="-" Then If mid(curarg,2,len(param))=param Then ch=mid(args(i),2+len(param)) If (left(ch,1)="""") and (right(ch,1)="""") Then ch=mid(ch,2,len(ch)-2) getarg= ch exit function End If End If Next End Function '-------------------------------------------------------------------- Function GetString(str) dim f If fso.FileExists(str) Then set f=fso.OpenTextFile(str,ForReading) GetString=f.ReadAll f.Close else GetString=Replace(str,"\n",VBCRLF,1,-1,1) End If End Function '--------------------------------------------------------------------