Hallo,
ich habe wieder mal ein Problem.
Ich habe eine Script geschrieben das mittels eines VBA Scriptes eine MAPI Mail verschickt.
Dazu erzeuge ich im TEMP Ordner eine VBS Datei die dann mit daten gefüllt wird.
Das klappt im Prinzip wunderbar solange das Script nicht zweimal gleichzeitig ausgeführt wird.
genau das will ich aber per Taskplaner machen, so das dann ein VBS Fwehler erzeugt wird (Datei ist schon im Zugriff)
Ich habe versucht das Problem mit RANDOM zu lösen.
Da der Taskplaner aber mehrere male das Script wirklich in der selbern Millisekunde startet wird immer wieder ein dioppelter Name erzeugt was dann zur Fehlermeldung führt.
Vielleicht hat jemand eine Idee wie ich das Probklem gelößt bekomme ?
Hier die entscheideneden Zeilen:
$temp_vba = @TempDir & "\" & "vbamail_" & @MSEC & @MDAY & $random & ".vbs"
sleep(10)
if FileExists($temp_vba) Then $temp_vba= @TempDir & "\" & "vbamail_" & $random & @MSEC & ".vbs"
$file=FileOpen($temp_vba,2)
Für alle die das mit dem MAPI Mailen Interessiert hier der gesamte Code
#include <process.au3>
$random = Random(1,100,1)
dim $temp_vba, $file, $mailempfaenger, $betreff = "", $body = "", $attach, $random = Random(@msec,@MSEC+@MSEC+@MSEC,1)
$temp_vba = @TempDir & "\" & "vbamail_" & @MSEC & @MDAY & $random & ".vbs"
sleep(10)
if FileExists($temp_vba) Then $temp_vba= @TempDir & "\" & "vbamail_" & $random & @MSEC & ".vbs"
$file=FileOpen($temp_vba,2)
vba_mail()
Func vba_mail()
if not ProcessExists ("outlook.exe") Then ShellExecute("outlook.exe")
While 1
If ProcessExists ("outlook.exe") Then ExitLoop
Sleep(1000)
WEnd
if $CmdLine[0] = 0 Then
help()
EndIf
; Komandozeilenparameter auslesen
if IsArray($CmdLine) Then
$i=1
for $i=1 to $CmdLine[0] Step 1
if $CmdLine[$i] = "-h" Then help()
if $CmdLine[$i] = "-r" Then $mailempfaenger=$CmdLine[$i+1]
if $CmdLine[$i] = "-s" Then $betreff=$CmdLine[$i+1]
if $CmdLine[$i] = "-m" Then $body=$CmdLine[$i+1]
if $CmdLine[$i] = "-f" Then $attach=$CmdLine[$i+1]
Next
;~ $summe=StringToBinary($mailempfaenger)+StringToBinary($betreff)+StringToBinary($body)+StringToBinary(@MSEC)
;~ ToolTip($mailempfaenger & " " & $betreff & " " & $body & " " & $attach)
;~ Sleep(5000)
EndIf
FileWriteLine($file, 'Set oOApp = CreateObject("Outlook.Application")')
FileWriteLine($file, 'Set oOMail = oOApp.CreateItem(olMailItem)')
FileWriteLine($file, 'With oOMail')
FileWriteLine($file, ' .To = "' & $mailempfaenger & '"')
FileWriteLine($file, ' .Subject = "' & $betreff & '"')
FileWriteLine($file, ' .Body = "' & $body & '"')
if Not $attach = "" Then FileWriteLine($file, ' .Attachments.Add("' & $attach & '"), olByValue, 1 ')
FileWriteLine($file, ' .Send')
FileWriteLine($file, 'End With')
ShellExecute($temp_vba)
EndFunc
Func Help()
MsgBox(0,"Sendet MAPI Emails von der Komandozeile (Outlook muß gestartet sein)",'Beispiel:' & @cr & 'mapimail.exe -r "ab@c.de" -s "Betreff" -m "Mailtext" -f "c:\test.txt" '& @CR & @CR& _
'-h "ruft diese Hilfe auf"'& @CR & _
'-r "Empfänger" (mehrere mit ";" trennen, keine Leerzeichen erlaubt)'& @CR & _
'-s "Betreffzeile"'& @CR & _
'-m "Mailtext"'& @CR & _
'-f "Pfad zum Attachment"' _
)
Exit
EndFunc
Alles anzeigen