J'ai un morceau de code VBS qui envoie des mails automatiquement !
Je voudrais obtenir un fichier log qui liste les personnes =E0 qui on
envoie un mail !
Comment faire, SVP ?
Merci !
Voici le code :
Sub SendEmailMessage(strDestEmail, strNoOfDays)
Set objMessage =3D CreateObject("CDO.Message")
objMessage.Subject =3D "Password Expires in " & strNoOfDays & " days"
objMessage.Sender =3D "toto@exchtest.local"
objMessage.To =3D strDestEmail
objMessage.TextBody =3D "Your password expires in " & strNoOfDays & "
days. Please go to http://www.google.fr"=20
objMessage.Send
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Claude BELLAMY
Dans le message :, jcc0127 a pris la peine d'écrire ce qui suit :
Bonjour,
J'ai un morceau de code VBS qui envoie des mails automatiquement ! Je voudrais obtenir un fichier log qui liste les personnes à qui on envoie un mail ! Comment faire, SVP ?
J'ai inclus les lignes nécessaire :
Voici le code :
Sub SendEmailMessage(strDestEmail, strNoOfDays)
ForAppending=8 LogName="k:trucs diversjournal sendmail.log" Set fso = WScript.CreateObject("Scripting.FileSystemObject") set f=fso.OpenTextFile(LogName,ForAppending,true)
Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Password Expires in " & strNoOfDays & " days" objMessage.Sender = "" objMessage.To = strDestEmail objMessage.TextBody = "Your password expires in " & strNoOfDays & " days. Please go to http://www.google.fr" objMessage.Send
f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " & Time f.close
End Sub
NB: suivant la structure générale de ton code, il est possible et même souhaitable de placer les 3 1ères instructions (avant le "CreateObjetc(CDO...") AVANT le sous-programme, et le "f.close" sera placé à la fin du script.
-- May the Force be with You! La Connaissance s'accroît quand on la partage ---------------------------------------------------------- Jean-Claude BELLAMY [MVP] http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Dans le message :1141726007.362197.290420@j33g2000cwa.googlegroups.com,
jcc0127 <jcc0127@gmail.com> a pris la peine d'écrire ce qui suit :
Bonjour,
J'ai un morceau de code VBS qui envoie des mails automatiquement !
Je voudrais obtenir un fichier log qui liste les personnes à qui on
envoie un mail !
Comment faire, SVP ?
J'ai inclus les lignes nécessaire :
Voici le code :
Sub SendEmailMessage(strDestEmail, strNoOfDays)
ForAppending=8
LogName="k:trucs diversjournal sendmail.log"
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(LogName,ForAppending,true)
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Password Expires in " & strNoOfDays & " days"
objMessage.Sender = "toto@exchtest.local"
objMessage.To = strDestEmail
objMessage.TextBody = "Your password expires in " & strNoOfDays & "
days. Please go to http://www.google.fr"
objMessage.Send
f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " & Time
f.close
End Sub
NB: suivant la structure générale de ton code, il est possible et même
souhaitable de placer les 3 1ères instructions (avant le
"CreateObjetc(CDO...") AVANT le sous-programme, et le "f.close" sera placé à
la fin du script.
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Dans le message :, jcc0127 a pris la peine d'écrire ce qui suit :
Bonjour,
J'ai un morceau de code VBS qui envoie des mails automatiquement ! Je voudrais obtenir un fichier log qui liste les personnes à qui on envoie un mail ! Comment faire, SVP ?
J'ai inclus les lignes nécessaire :
Voici le code :
Sub SendEmailMessage(strDestEmail, strNoOfDays)
ForAppending=8 LogName="k:trucs diversjournal sendmail.log" Set fso = WScript.CreateObject("Scripting.FileSystemObject") set f=fso.OpenTextFile(LogName,ForAppending,true)
Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Password Expires in " & strNoOfDays & " days" objMessage.Sender = "" objMessage.To = strDestEmail objMessage.TextBody = "Your password expires in " & strNoOfDays & " days. Please go to http://www.google.fr" objMessage.Send
f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " & Time f.close
End Sub
NB: suivant la structure générale de ton code, il est possible et même souhaitable de placer les 3 1ères instructions (avant le "CreateObjetc(CDO...") AVANT le sous-programme, et le "f.close" sera placé à la fin du script.
-- May the Force be with You! La Connaissance s'accroît quand on la partage ---------------------------------------------------------- Jean-Claude BELLAMY [MVP] http://www.bellamyjc.org ou http://jc.bellamy.free.fr
jcc0127
Merci beaucoup JC !
Effectivement, le code entier est beaucoup plus long et sert à surveiller les comptes qui expirent bientôt pour avertir les utilisateurs par mail. Je le fait passer au cas où cela intéresserait quelqu'un ! (J'ai inclus ta solution !) D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de passe expire, je met en remarque la ligne = objMessage.Send Est-ce correct ?
JCC
' Runs check on last password change date ' Option Explicit
Dim objCommand, objConnection, objChild, objUserConnection, strBase, strFilter, strAttributes, strPasswordChangeDate, intPassAge Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain Dim strQuery, objRecordset, strName, strCN
' ********************* CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT OF WHERE USERS WILL BE SEARCHED ***********************************
' Obtain local Time Zone bias from machine registry. Set objShell = CreateObject("Wscript.Shell") lngBiasKey = objShell.RegRead("HKLMSystemCurrentControlSetControlTimeZoneInformation ActiveTimeBias") If UCase(TypeName(lngBiasKey)) = "LONG" Then lngTZBias = lngBiasKey ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then lngTZBias = 0 For k = 0 To UBound(lngBiasKey) lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k) Next End If
Do Until objRecordSet.EOF strName = objRecordSet.Fields("sAMAccountName").Value strCN = objRecordSet.Fields("cn").value strEmailAddress = objRecordSet.Fields("mail").value Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN
Set objUserConnection = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value) Set objPwdLastSet = objUserConnection.pwdLastSet strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias) WScript.Echo vbTab & "Password last changed at " & strPasswordChangeDate intPassAge = DateDiff("d", strPasswordChangeDate, Now) WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"
If intPassAge = (PasswordExpiry-3) Then WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 3 days" Call SendEmailMessage(strEmailAddress, 3) ElseIf intPassAge = (PasswordExpiry-6) Then WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 6 days" Call SendEmailMessage(strEmailAddress, 6) ElseIf intPassAge = (PasswordExpiry-9) Then WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 9 days" Call SendEmailMessage(strEmailAddress, 9) End If
objRecordSet.MoveNext Loop
objConnection.Close
Function Integer8Date(objDate, lngBias) ' Function to convert Integer8 (64-bit) value to a date, adjusted for ' local time zone bias. Dim lngAdjust, lngDate, lngHigh, lngLow lngAdjust = lngBias lngHigh = objDate.HighPart lngLow = objdate.LowPart ' Account for error in IADslargeInteger property methods. If lngLow < 0 Then lngHigh = lngHigh + 1 End If If (lngHigh = 0) And (lngLow = 0) Then lngAdjust = 0 End If lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _ + lngLow) / 600000000 - lngAdjust) / 1440 ' Trap error if lngDate is overly large On Error Resume Next Integer8Date = CDate(lngDate) If Err.Number <> 0 Then On Error GoTo 0 Integer8Date = #1/1/1601# End If On Error GoTo 0 End Function
Sub SendEmailMessage(strDestEmail, strNoOfDays)
ForAppending=8 LogName="k:trucs diversjournal sendmail.log" Set fso = WScript.CreateObject("Scripting.FileSystemObject") set f=fso.OpenTextFile(LogName,ForAppending,true)
Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Password Expires in " & strNoOfDays & " days" objMessage.Sender = "" objMessage.To = strDestEmail objMessage.TextBody = "Your password expires in " & strNoOfDays & " days. Please go to http://www.google.fr" objMessage.Send
f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " & Time f.close
End Sub
Merci beaucoup JC !
Effectivement, le code entier est beaucoup plus long et sert à
surveiller les comptes qui expirent bientôt pour avertir les
utilisateurs par mail.
Je le fait passer au cas où cela intéresserait quelqu'un !
(J'ai inclus ta solution !)
D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de
passe expire, je met en remarque la ligne =
objMessage.Send
Est-ce correct ?
JCC
' Runs check on last password change date
'
Option Explicit
Dim objCommand, objConnection, objChild, objUserConnection, strBase,
strFilter, strAttributes, strPasswordChangeDate, intPassAge
Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage
Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain
Dim strQuery, objRecordset, strName, strCN
' ********************* CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT
OF WHERE USERS WILL BE SEARCHED ***********************************
' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey =
objShell.RegRead("HKLMSystemCurrentControlSetControlTimeZoneInformation ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If
Do Until objRecordSet.EOF
strName = objRecordSet.Fields("sAMAccountName").Value
strCN = objRecordSet.Fields("cn").value
strEmailAddress = objRecordSet.Fields("mail").value
Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN
Set objUserConnection = GetObject("LDAP://" &
objRecordSet.Fields("distinguishedName").Value)
Set objPwdLastSet = objUserConnection.pwdLastSet
strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias)
WScript.Echo vbTab & "Password last changed at " &
strPasswordChangeDate
intPassAge = DateDiff("d", strPasswordChangeDate, Now)
WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"
If intPassAge = (PasswordExpiry-3) Then
WScript.echo vbTab & "Sending user notification to " &
strEmailAddress & " that password expires in 3 days"
Call SendEmailMessage(strEmailAddress, 3)
ElseIf intPassAge = (PasswordExpiry-6) Then
WScript.echo vbTab & "Sending user notification to " &
strEmailAddress & " that password expires in 6 days"
Call SendEmailMessage(strEmailAddress, 6)
ElseIf intPassAge = (PasswordExpiry-9) Then
WScript.echo vbTab & "Sending user notification to " &
strEmailAddress & " that password expires in 9 days"
Call SendEmailMessage(strEmailAddress, 9)
End If
objRecordSet.MoveNext
Loop
objConnection.Close
Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is overly large
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function
Sub SendEmailMessage(strDestEmail, strNoOfDays)
ForAppending=8
LogName="k:trucs diversjournal sendmail.log"
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(LogName,ForAppending,true)
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Password Expires in " & strNoOfDays & " days"
objMessage.Sender = "toto@exchtest.local"
objMessage.To = strDestEmail
objMessage.TextBody = "Your password expires in " & strNoOfDays & "
days. Please go to http://www.google.fr"
objMessage.Send
f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " &
Time
f.close
Effectivement, le code entier est beaucoup plus long et sert à surveiller les comptes qui expirent bientôt pour avertir les utilisateurs par mail. Je le fait passer au cas où cela intéresserait quelqu'un ! (J'ai inclus ta solution !) D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de passe expire, je met en remarque la ligne = objMessage.Send Est-ce correct ?
JCC
' Runs check on last password change date ' Option Explicit
Dim objCommand, objConnection, objChild, objUserConnection, strBase, strFilter, strAttributes, strPasswordChangeDate, intPassAge Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain Dim strQuery, objRecordset, strName, strCN
' ********************* CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT OF WHERE USERS WILL BE SEARCHED ***********************************
' Obtain local Time Zone bias from machine registry. Set objShell = CreateObject("Wscript.Shell") lngBiasKey = objShell.RegRead("HKLMSystemCurrentControlSetControlTimeZoneInformation ActiveTimeBias") If UCase(TypeName(lngBiasKey)) = "LONG" Then lngTZBias = lngBiasKey ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then lngTZBias = 0 For k = 0 To UBound(lngBiasKey) lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k) Next End If
Do Until objRecordSet.EOF strName = objRecordSet.Fields("sAMAccountName").Value strCN = objRecordSet.Fields("cn").value strEmailAddress = objRecordSet.Fields("mail").value Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN
Set objUserConnection = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value) Set objPwdLastSet = objUserConnection.pwdLastSet strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias) WScript.Echo vbTab & "Password last changed at " & strPasswordChangeDate intPassAge = DateDiff("d", strPasswordChangeDate, Now) WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"
If intPassAge = (PasswordExpiry-3) Then WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 3 days" Call SendEmailMessage(strEmailAddress, 3) ElseIf intPassAge = (PasswordExpiry-6) Then WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 6 days" Call SendEmailMessage(strEmailAddress, 6) ElseIf intPassAge = (PasswordExpiry-9) Then WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 9 days" Call SendEmailMessage(strEmailAddress, 9) End If
objRecordSet.MoveNext Loop
objConnection.Close
Function Integer8Date(objDate, lngBias) ' Function to convert Integer8 (64-bit) value to a date, adjusted for ' local time zone bias. Dim lngAdjust, lngDate, lngHigh, lngLow lngAdjust = lngBias lngHigh = objDate.HighPart lngLow = objdate.LowPart ' Account for error in IADslargeInteger property methods. If lngLow < 0 Then lngHigh = lngHigh + 1 End If If (lngHigh = 0) And (lngLow = 0) Then lngAdjust = 0 End If lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _ + lngLow) / 600000000 - lngAdjust) / 1440 ' Trap error if lngDate is overly large On Error Resume Next Integer8Date = CDate(lngDate) If Err.Number <> 0 Then On Error GoTo 0 Integer8Date = #1/1/1601# End If On Error GoTo 0 End Function
Sub SendEmailMessage(strDestEmail, strNoOfDays)
ForAppending=8 LogName="k:trucs diversjournal sendmail.log" Set fso = WScript.CreateObject("Scripting.FileSystemObject") set f=fso.OpenTextFile(LogName,ForAppending,true)
Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Password Expires in " & strNoOfDays & " days" objMessage.Sender = "" objMessage.To = strDestEmail objMessage.TextBody = "Your password expires in " & strNoOfDays & " days. Please go to http://www.google.fr" objMessage.Send
f.write "Message envoyé à " & strDestEmail & " le " & Date & " à " & Time f.close
End Sub
Jean-Claude BELLAMY
Dans le message :, jcc0127 a pris la peine d'écrire ce qui suit :
Merci beaucoup JC !
Effectivement, le code entier est beaucoup plus long et sert à surveiller les comptes qui expirent bientôt pour avertir les utilisateurs par mail. Je le fait passer au cas où cela intéresserait quelqu'un ! (J'ai inclus ta solution !) D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de passe expire, je met en remarque la ligne > objMessage.Send Est-ce correct ?
OUI ! (tu peux commenter aussi tout ce qu'il y a avant concernant l'objet CDO.message)
-- May the Force be with You! La Connaissance s'accroît quand on la partage ---------------------------------------------------------- Jean-Claude BELLAMY [MVP] http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Dans le message :1141737538.865625.128560@j33g2000cwa.googlegroups.com,
jcc0127 <jcc0127@gmail.com> a pris la peine d'écrire ce qui suit :
Merci beaucoup JC !
Effectivement, le code entier est beaucoup plus long et sert à
surveiller les comptes qui expirent bientôt pour avertir les
utilisateurs par mail.
Je le fait passer au cas où cela intéresserait quelqu'un !
(J'ai inclus ta solution !)
D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de
passe expire, je met en remarque la ligne > objMessage.Send
Est-ce correct ?
OUI !
(tu peux commenter aussi tout ce qu'il y a avant concernant l'objet
CDO.message)
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Dans le message :, jcc0127 a pris la peine d'écrire ce qui suit :
Merci beaucoup JC !
Effectivement, le code entier est beaucoup plus long et sert à surveiller les comptes qui expirent bientôt pour avertir les utilisateurs par mail. Je le fait passer au cas où cela intéresserait quelqu'un ! (J'ai inclus ta solution !) D'ailleurs, si je veux juste la liste des utilisateurs dont le mot de passe expire, je met en remarque la ligne > objMessage.Send Est-ce correct ?
OUI ! (tu peux commenter aussi tout ce qu'il y a avant concernant l'objet CDO.message)
-- May the Force be with You! La Connaissance s'accroît quand on la partage ---------------------------------------------------------- Jean-Claude BELLAMY [MVP] http://www.bellamyjc.org ou http://jc.bellamy.free.fr
jcc0127
Encore moi !
J'ai un message d'erreur au lancement du script avec cscript :
pwdchg.vbs (45,1) Provider: Table does not exist
D'ou peut-elle venir ? Merci d'avance !
JCC
Encore moi !
J'ai un message d'erreur au lancement du script avec cscript :