askando
Goto Top

Hilfe!! Script erstellen, das 2 Dateien prüfen soll und dann als email zb. mit blat versenden.

Hallo!

Ich habe ein Problem, das mein ein Vorgänger von mir für eine Fax Lösung (GFI Fax) ein Programm geschrieben hat und dieses nur im kompilierten Status aufzufinden ist und nicht nicht mehr funktioniert.

Nun im Prinzip soll das Programm oder meinetwegen auch Script prüfen ob in einem Verzeichnis 2 Dateien (Pdf und txt) vorhanden sind. (PDF = Fax das als Anhang per Email versendet werden soll; TXT= Absender, Faxnummer u. Auftragsnummer) wenn beide vorhanden, dann kopiere in ein "out" Verzeichnis und danach versende die pdf per mail.

Ich bin kein Programmierer, sondern kümmere mich ausschließlich um Virtualisierungen etc. nun da ich nicht weiß in welcher Sprache er das Programm geschrieben hat und auch leider nirgendwo Projektdateien hinterlassen hat muss ich mir was einfallen lassen.
Wäre echt froh wenn mir jemand dabei helfen kann.

Mfg

Content-ID: 224857

Url: https://administrator.de/contentid/224857

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

ChrisDynamite
Lösung ChrisDynamite 18.12.2013 aktualisiert um 15:37:38 Uhr
Goto Top
im einfachsten fall kann man das schon per batch script machen.

:nachoben
if exist c:\inputornder\*.pdf {

dann hier die txt auslesen. das geht am besten per findstr. den wert auslesen und in eine variable speichern

dann blat aufrufen und die variable irgendwo dem programm übergeben (muss ich mir genauer anschauen)
sprung wieder nach oben
goto nachoben
}

und um das in einer schleife auszuführen und möglichst einfach zu halten (das ist die ultra-billig-variante) in den else zweig ein:

else {
goto nachoben
}


soooo ungefähr kann man das sicherlich lösen.
wenn ich zeit finde mach ich das heute abend. schreib mir, falls du keine andere lösung gefunden hast.

grüße chris
askando
askando 18.12.2013 um 15:38:29 Uhr
Goto Top
Danke Chris! ich versuche es mal so wie du es vorgeschlagen hast.
ChrisDynamite
Lösung ChrisDynamite 18.12.2013 aktualisiert um 16:33:25 Uhr
Goto Top
nach welchem schema heißen die txt und pdf dateien?
ChrisDynamite
Lösung ChrisDynamite 18.12.2013 aktualisiert um 16:33:23 Uhr
Goto Top
heißt die txt oder pdf immer gleich?
ChrisDynamite
Lösung ChrisDynamite 18.12.2013 aktualisiert um 16:33:22 Uhr
Goto Top
hier der ca. codeteil:

:run
set TXT_INHALT = ""  
	IF EXIST "c:\Ordner\*.pdf" && IF EXIST "c:\Ordner\*.txt"  
		{
		set /p TXT_INHALT=<c:\name der txt.txt
		
		
		rem hier kommt jetzt der blat code und als platzhalter der email adresse kommt der inhalt von TXT_inhalt rein.
		rem zurück zum anfang
		goto run
		}
		
	ELSE 
		{
		rem zurück zum Anfang
		goto run
		}
colinardo
Lösung colinardo 18.12.2013 aktualisiert um 23:30:02 Uhr
Goto Top
Hallo askando,
wenn es ein AutoIT Script sein darf, das den Ordner selbständig in einem änderbaren Intervall überprüft, inklusive integriertem Mailversand ohne externe Tools(via CDO):
Es muss nur einmal gestartet werden, und läuft dann permanent im Hintergrund.
Die Variablen die angepasst werden müssen, findest du im Kopft des Scripts.
  • Zeile 4 = Pfad in dem die PDF-Dateien eingehen
  • Zeile 5 = Pfad in den die PDF-Dateien verschoben werden
  • Zeile 7 = Intervall (Sekunden) in dem der Ordner auf neue Faxe überprüft werden soll
  • ab Zeile 9 die Daten für deinen Mailserver und die Mailadressen
Der Code geht jetzt davon aus das die Textdatei den gleichen Namen wie das PDF besitzt.
#NoTrayIcon
#Include <file.au3>
; Variablen ------------------
global $CHECKDIR = "C:\Temp\source"  
global $OUTDIR = "C:\Temp\target"  
; Intervall in dem der Ordner überprüft werden soll (Sekunden)
Const $CHECKINTERVALL = 5
; Mail Daten
Global $FROMEMAIL = ""  
Global $TOEMAIL = ""  
Const $FROMNAME = "Dein Name"  
Const $MAILSERVER = "SMTP.SERVER.DE"  
Const $SMTPUSER = "SMTPUSERNAME"  
Const $SMTPPASS = "SMTPPASSWORD"  
Const $SMTPPORT = "25"  
Const $SMTPUSESSL = 1
;-----------------------------
While 1
	$search = FileFindFirstFile($CHECKDIR & "\*.pdf")  
	if $search <> -1 then
		While 1
			$file = FileFindNextFile($search)
			If @error Then ExitLoop
			local $szDrive, $szDir, $szFName, $szExt
			_PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
			$pdfFile = $CHECKDIR & "\" & $file  
			$txtFile = $CHECKDIR & "\" & $szFName & ".txt"  
			if FileExists($txtFile) then
				$f = FileOpen($txtFile)
				$line1 = FileReadLine($f,1)
				$line2 = FileReadLine($f,2)
				FileClose($f)
				$text_faxnummer = StringRegExp($line1,",\s*([^\r\n]+)",3)  
				$ret1 = @error
				$text_email = StringRegExp($line2,"fr=([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6})",3)  
				$ret2 = @error
				if $ret1 = 0 and $ret2 = 0 then
					$FROMEMAIL = StringReplace($text_email," ","")  
					$TOEMAIL = StringReplace($text_faxnummer," ","") & "@faxmaker.com"  
					_INetSmtpMailCom($MAILSERVER,$FROMNAME,$FROMEMAIL,$TOEMAIL,"Neues Fax","Im Anhang finden sie das Fax als PDF",$pdfFile,"","","Normal",$SMTPUSER,$SMTPPASS,$SMTPPORT,$SMTPUSESSL)  
					FileMove($pdfFile,$OUTDIR & "\",9)  
					FileMove($txtFile,$OUTDIR & "\",9)  
				Endif
			Endif
		WEnd
	EndIf
	FileClose($search)
	Sleep($CHECKINTERVALL * 1000)
WEnd



; Variables for Function _INetSmtpMailCom
;##################################
;~ $SmtpServer = ""                            ; address for the smtp-server to use - REQUIRED  
;~ $FromName = "User"                          ; name from who the email was sent  
;~ $FromAddress = ""                           ; address from where the mail should come  
;~ $ToAddress = ""                             ; destination address of the email - REQUIRED  
;~ $Subject = "testsubject"                       ; subject from the email - can be anything you want it to be  
;~ $Body = "This Is The Body"                  ; the messagebody from the mail - can be left blank but then you get a blank mail  
;~ $AttachFiles = ""                           ; the file you want to attach- leave blank if not needed  
;~ $CcAddress = ""                             ; address for cc - leave blank if not needed  
;~ $BccAddress = ""                            ; address for bcc - leave blank if not needed  
;~ $Importance = "Normal"                      ; Send message priority: "High", "Normal", "Low"  
;~ $Username = ""                              ; username for the account used from where the mail gets sent - REQUIRED  
;~ $Password = ""                              ; password for the account used from where the mail gets sent - REQUIRED  
;~ $IPPort = 25                               ; port used for sending the mail

;~ $ssl=0                                   ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS


Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)  
    Local $objEmail = ObjCreate("CDO.Message")  
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'  
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""  
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress  
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress  
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then  
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then  
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")  
        For $x = 1 To $S_Files2Attach
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
            ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console  
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment ($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)  
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2  
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer  
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort  
    ;Authenticated SMTP
    If $s_Username <> "" Then  
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1  
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username  
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password  
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True  
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"  
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"  
        Case "Normal"  
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"  
        Case "Low"  
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"  
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
    EndIf
    $objEmail=""  
EndFunc   ;==>_INetSmtpMailCom
Viel Spaß

Grüße Uwe
askando
askando 18.12.2013 aktualisiert um 17:25:48 Uhr
Goto Top
Hey!

@ Chris
Also die PDF und die zugehörige txt Datei haben den selben Namen, der jedoch bedingt durch Auftragsnummer variiert.

Beispielsweise:
NameStandort_Auftragsnummer.pdf (Anhang); NameStandort_Auftragsnummer.txt

Dies ist der Inhalt der Textdatei
::Name Empfänger, Faxnummer 
::A=Name der PDF (Anhang), fr=Absender Emailadresse#

@ Uwe
Vielen Dank! In der Zeile 9 wird quasi eine konstante Emailadresse zum versenden via smtp angegeben. Jedoch müsste ich genau an der Stelle einen Wert aus der zugehörigen txt. auslesen. Ebenso in der Zeile 10, dort müsste quasi die Faxnummer ausgelesen werden und @faxmaker.com dahinter hinzugefügt werden.
colinardo
Lösung colinardo 18.12.2013 aktualisiert um 17:27:09 Uhr
Goto Top
Zitat von @askando:
@ Uwe
Vielen Dank! In der Zeile 9 wird quasi eine konstante Emailadresse zum versenden via smtp angegeben. Jedoch müsste ich genau
an der Stelle einen Wert aus der zugehörigen txt. auslesen. Ebenso in der Zeile 10, dort müsste quasi die Faxnummer
ausgelesen werden und @faxmaker.com dahinter hinzugefügt werden.
ist das der korrekt formatierte Inhalt deiner Textdatei?
::Name Empfänger, Faxnummer
::A=Name der PDF (Anhang), fr=Absender Emailadresse
bitte benutze Tags um das hier einzustellen, damit keine Sonderzeichen unterschlagen werden.
askando
askando 18.12.2013 aktualisiert um 17:37:33 Uhr
Goto Top
Ja Colinardo!

Genauso sehen die Inhalte der Textdateien aus!
colinardo
Lösung colinardo 18.12.2013 aktualisiert um 17:34:42 Uhr
Goto Top
Zitat von @askando:
Genauso sehen die Inhalte der Textdateien aus!
OK ist oben im Script angepasst...