Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Neue Datei auf FTP-Server erkennen und per Email (als Anhang) versenden an feste Emailadresse (Blat, AutoIT, WatchFTP ?)

Frage Entwicklung Batch & Shell

Mitglied: TSohnges

TSohnges (Level 1) - Jetzt verbinden

18.02.2015, aktualisiert 21.02.2015, 950 Aufrufe, 1 Kommentar, 1 Danke

Hallo,

ich bräuchte ein bißchen Hilfe bei der Umsetzung folgender Aufgabe und würde mich über Denkanstöße oder Hilfe sehr freuen:

Auf einem Windows-PC soll - alle 15min wiederkehrend im Hintergrund - folgendes Skript ablaufen:
1) Ein bestimmtes (externes) FTP-Verzeichnis soll regelmäßig z.B. alle 15min per FTP auf neue Dateien überprüft werden. Nur neue Dateien, keine neuen Ordner... Dateityp egal...
2) Falls neue Dateien (Typ, Größe egal) vorhanden sind, sollen diese per FTP runtergeladen werden in einen lokalen Ordner auf dem Windows-PC und dann
3) als Emailanhang verschickt werden, jede Datei einzeln, mit einem mehrzeiligen Standardtext ("Sehr geeehrte... anbei erhalten Sie... mit freundlichen Grüßen"), Betreff jeweils mit dem variablen Dateinamen "Anbei DATEINAME zur Information". To: und CC: wären immer gleich. Versand erfolgt über SMTP-Server vom Provider (auth). Keinr Verbindung zu Outlook o.ä. nötig und auch nicht gewünscht.
4) Anschließend soll die Datei in einen Ordner verschoben werden "verschickte Dateien" o.ä.

Ich dachte an BLAT oder ggf. auch AutoIT.

Hab mich auch schon eingelesen in die beiden Threads hier:
http://www.administrator.de/frage/pdf-dateien-verzeichnis-automatisch-e ... und
http://www.administrator.de/frage/hilfe-script-erstellen-das-2-dateien- ...
habe mich bisher für die BLAT-Variante entschieden, ich denke das reicht und sollte funktionieren, aber leider bin ich bei den Skriptkenntnissen nicht so auf der Höhe.

Habe mir auch WatchFTP http://www.watchftp.de/ angesehen, aber ich möchte nicht nur eine Email bekommen, DASS sich etwas auf dem FTP-Server geändert hat, sondern genau diese Datei gleich an die Email anhängen. Soweit ich das erkennen konnte, wird dies von WatchFTP nicht unterstützt. Schlanker und mir lieber wäre eigentlich auch BLAT, denke ich.

Vielen Dank vorab
Andere Vorschläge (freeware, shareware oder dergl. die das kann auch gerne willkommen)

Tilo
Mitglied: 114757
LÖSUNG 21.02.2015, aktualisiert um 17:50 Uhr
Moin Moin,
AutoIT All-In-One ohne externe Tools, das ganze alle 15 Minuten in den Taskplaner, feddich.
Viel Erfolg...
01.
#NoTrayicon 
02.
; Includes ----- 
03.
#include <FTPEx.au3> 
04.
#include <Array.au3> 
05.
#Include <file.au3> 
06.
#Include <WinAPI.au3> 
07.
; ---- FTP Settings ---- 
08.
Const $SERVER = "ftp.domain.de" 
09.
Const $USERNAME = "USERNAME" 
10.
Const $PASSWORD = "PASSWORD" 
11.
Const $FTPDIR = "/data/ordner" 
12.
; --------- 
13.
; ---- MAIL-SETTINGS ----- 
14.
Const $FROMEMAIL = "from@domain.de" 
15.
Const $TOEMAIL = "to@domain.de" 
16.
Const $CCEMAIL = "cc@domain.de" 
17.
Const $FROMNAME = "ABSENDERNAME" 
18.
Const $MAILSERVER = "smtp.domain.de" 
19.
Const $SMTPUSER = "user@domain.de" 
20.
Const $SMTPPASS = "PASSWORD" 
21.
Const $SMTPPORT = "25" 
22.
Const $SMTPUSESSL = 1 
23.
; ----------------- 
24.
Global $downloadDir = @TempDir 
25.
Global $archiveDir = @ScriptDir & "\archive" 
26.
Global $syncFile = @ScriptDir & "\files.txt" 
27.
Global $newFiles[1] 
28.
;---------------- 
29.
; Archivverzeichnis erstellen wenn es nicht existiert 
30.
if not FileExists($archiveDir) then DirCreate($archiveDir) 
31.
$ftp = _FTP_Open("myagent") 
32.
; Verbinde mit FTP-Server 
33.
$conn = _FTP_Connect($ftp,$SERVER,$USERNAME,$PASSWORD) 
34.
if $conn = 0 then 
35.
	msgbox(48,"Verbindungs-Fehler","Die Verbindung zum FTP-Server konnte nicht hergestellt werden",2) 
36.
	_FTP_Close($ftp) 
37.
	exit 1 
38.
EndIf 
39.
; navigiere in FTP Ordner 
40.
if _FTP_DirSetCurrent($conn,$FTPDIR) = 0 then 
41.
	msgbox(48,"Verzeichnisfehler","In das FTP-Verzeichnis konnte nicht gewechselt werden!",2) 
42.
	_FTP_Close($ftp) 
43.
	exit 1 
44.
endif 
45.
; hole Liste aller aktuellen Dateien im Verzeichnis 
46.
$arrCurrentFiles = _Ftp_ListToArray($conn,2) 
47.
; Vergleiche Dateiliste wenn vorhanden 
48.
if FileExists($syncFile) then 
49.
	$fOpen = FileOpen($syncFile) 
50.
	$arrLastFiles = StringSplit(FileReadLine($fOpen,1),"|") 
51.
	FileClose($fOpen) 
52.
	for $i = 1 to $arrCurrentFiles[0] 
53.
		if _ArraySearch($arrLastFiles,BinaryToString($arrCurrentFiles[$i],4)) = -1 then 
54.
			_ArrayAdd($newFiles,$arrCurrentFiles[$i]) 
55.
		Endif 
56.
	Next 
57.
Else 
58.
	; Speichere initial alle aktuellen Dateinamen im FTP-Verzeichnis 
59.
	$strFiles = BinaryToString(_ArrayToString($arrCurrentFiles,"|",1),4) 
60.
	$fSave = FileOpen($syncFile,138) 
61.
	FileWrite($fSave,$strFiles) 
62.
	FileClose($fSave) 
63.
	msgbox(64,"Erstsynchronisierung erfolgt", "Die Dateiliste wurde erstmalig erstellt, nachfolgend hinzukommende Dateien werden bei erneutem Aufruf versendet",4) 
64.
Else 
65.
EndIf 
66.
; Alle neuen Dateien lokal speichern, per Mail verschicken und Archivieren 
67.
if UBound($newFiles) > 1 then 
68.
	local $sentFiles 
69.
	for $i = 1 to UBound($newFiles)-1 
70.
		;Download File 
71.
		$UTF8Name = BinaryToString($newFiles[$i],4) 
72.
		if _FTP_FileGet($conn,$newFiles[$i],$downloadDir & "\" & $UTF8Name ) = 1 then 
73.
			;Send Mail with Attachment 
74.
			local $mBody = "Sehr geehrte Damen und Herren," & @CRLF & "anbei erhalten sie eine neue Datei." & @CRLF & "Mit freundlichen Grüßen" & @CRLF & "Ihre Firma XYZ" 
75.
			local $mSubject = "Anbei " & $UTF8Name & " zur Information." 
76.
			_INetSmtpMailCom($MAILSERVER,$FROMNAME,$FROMEMAIL,$TOEMAIL,$mSubject,$mBody,$downloadDir & "\" & $UTF8Name,$CCEMAIL,"","Normal",$SMTPUSER,$SMTPPASS,$SMTPPORT,$SMTPUSESSL) 
77.
			; Wenn Datei erfolgreich veschickt wurde => Datei archivieren 
78.
			if not @error then 
79.
				FileMove($downloadDir & "\" & $UTF8Name,$archiveDir,1) 
80.
				$sentfiles = $sentFiles & "|" & $UTF8Name 
81.
			endif 
82.
		Endif 
83.
	Next 
84.
	$fSave = FileOpen($syncFile,129) 
85.
	FileWrite($fSave,$sentFiles) 
86.
	FileClose($fSave) 
87.
	msgbox(64,"Erfolg", "Folgende Dateien wurden erfolgreich versendet: " & @CRLF & @CRLF & $sentFiles,2) 
88.
Else 
89.
	msgbox(64,"Keine neuen Dateien","Es wurden keine neuen Dateien gefunden!",1) 
90.
Endif 
91.
 
92.
;Trenne FTP Verbindung 
93.
_FTP_Close($ftp) 
94.
Exit 0 
95.
 
96.
 
97.
; Functions ------------------------------ 
98.
 
99.
; Variables for Function _INetSmtpMailCom 
100.
;################################## 
101.
;~ $SmtpServer = ""                            ; address for the smtp-server to use - REQUIRED 
102.
;~ $FromName = "User"                          ; name from who the email was sent 
103.
;~ $FromAddress = ""                           ; address from where the mail should come 
104.
;~ $ToAddress = ""                             ; destination address of the email - REQUIRED 
105.
;~ $Subject = "testsubject"                       ; subject from the email - can be anything you want it to be 
106.
;~ $Body = "This Is The Body"                  ; the messagebody from the mail - can be left blank but then you get a blank mail 
107.
;~ $AttachFiles = ""                           ; the file you want to attach- leave blank if not needed 
108.
;~ $CcAddress = ""                             ; address for cc - leave blank if not needed 
109.
;~ $BccAddress = ""                            ; address for bcc - leave blank if not needed 
110.
;~ $Importance = "Normal"                      ; Send message priority: "High", "Normal", "Low" 
111.
;~ $Username = ""                              ; username for the account used from where the mail gets sent - REQUIRED 
112.
;~ $Password = ""                              ; password for the account used from where the mail gets sent - REQUIRED 
113.
;~ $IPPort = 25                               ; port used for sending the mail 
114.
 
115.
;~ $ssl=0                                   ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS 
116.
 
117.
 
118.
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) 
119.
    Local $objEmail = ObjCreate("CDO.Message") 
120.
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' 
121.
    $objEmail.To = $s_ToAddress 
122.
    Local $i_Error = 0 
123.
    Local $i_Error_desciption = "" 
124.
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress 
125.
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress 
126.
    $objEmail.Subject = $s_Subject 
127.
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then 
128.
        $objEmail.HTMLBody = $as_Body 
129.
    Else 
130.
        $objEmail.Textbody = $as_Body & @CRLF 
131.
    EndIf 
132.
    If $s_AttachFiles <> "" Then 
133.
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";") 
134.
        For $x = 1 To $S_Files2Attach[0] 
135.
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x]) 
136.
            If FileExists($S_Files2Attach[$x]) Then 
137.
                $objEmail.AddAttachment ($S_Files2Attach[$x]) 
138.
            Else 
139.
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF) 
140.
                SetError(1) 
141.
                Return 0 
142.
            EndIf 
143.
        Next 
144.
    EndIf 
145.
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
146.
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer 
147.
    If Number($IPPort) = 0 then $IPPort = 25 
148.
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort 
149.
    ;Authenticated SMTP 
150.
    If $s_Username <> "" Then 
151.
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 
152.
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username 
153.
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password 
154.
    EndIf 
155.
    If $ssl Then 
156.
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True 
157.
    EndIf 
158.
    ;Update settings 
159.
    $objEmail.Configuration.Fields.Update 
160.
    ; Set Email Importance 
161.
    Switch $s_Importance 
162.
        Case "High" 
163.
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High" 
164.
        Case "Normal" 
165.
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal" 
166.
        Case "Low" 
167.
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low" 
168.
    EndSwitch 
169.
    $objEmail.Fields.Update 
170.
    ; Sent the Message 
171.
    $objEmail.Send 
172.
    If @error Then 
173.
        SetError(2) 
174.
    EndIf 
175.
    $objEmail="" 
176.
EndFunc   ;==>_INetSmtpMailCom
Gruß jodel32
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Bash Script soll neue Datei erzeugen (2)

Frage von SpeakerST zum Thema Batch & Shell ...

Linux Tools
CURL mehrere Dateien vom ftp-Server herunterladen (10)

Frage von highpriest zum Thema Linux Tools ...

Netzwerkmanagement
Zugriff auf FTP-Server durch Chrome in Windows 7 klappt nicht (3)

Frage von emilien2 zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...