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

PDF Dateien aus Verzeichnis automatisch per Email versenden

Frage Microsoft

Mitglied: heiser89

heiser89 (Level 1) - Jetzt verbinden

05.01.2014, aktualisiert 12.01.2014, 11322 Aufrufe, 40 Kommentare

Hallo Leute ich habe mal wieder ein Problem:
täglich kommen mehrere PDF Dateien in ein Verzeichnis und dieses muss ausgelesen werden und die PDF in 10 minuten Abständen Per Email an eine Andresse gesendet werden.
das Ganze findet auf einem SBS 2011 Server statt.
gibt es ein Skript dass ich per Aufgabenplanung starten kann damit dieses die Pdf dateien versendet.
auf dem Server läuft wie anders bei einem SBS gedacht Exchange und es ist auch Outlook 2007 installiert.
könnt ihr mir da ein Programm nennen oder evtl auch ein Skript.
Ich habe das Internet schon mal ein bisschen durchforscht allerdings nix richtiges gefunden.
Ich danke schon jetzt für eure Hilfe
40 Antworten
Mitglied: wiesi200
05.01.2014, aktualisiert um 19:41 Uhr
Hallo,

also Outlook hat eigentlich nichts auf nem Server verloren, vor allem wenn ein Exchange drauf ist. Bei älteren Versionen hat sich das sehr schön beiden können.

Du könntest das mit Blat.exe lösen.

http://www.administrator.de/forum/PDF-Datei-mit-Blat-versenden-126040.h ...
Bitte warten ..
Mitglied: colinardo
05.01.2014, aktualisiert um 20:52 Uhr
Hi,
hatte dazu schon mal ein ähnliches Script mit AutoIT geschrieben:
http://www.administrator.de/forum/hilfe-script-erstellen-das-2-dateien- ...
ließe sich einfach an deine Bedürfnisse anpassen. Es benötigt keine externen Tools zum Versenden per Mail.

Ähnliche Scripte in VBS und Powershell findest du hier:
http://www.administrator.de/forum/suche-eine-batch-tool-oder-programm-z ...
Hier muss dann nur noch die Mail-Routine ergänzt werden. Ist aber auch kein Problem, kann ich dir gerne anpassen.

Grüße Uwe
Bitte warten ..
Mitglied: heiser89
05.01.2014, aktualisiert um 22:17 Uhr
Was ich noch erwähnen muss ist: wenn sich keine PDF Datei in dem Ordner befindet, dann soll auch keine Email raus gehen.
Können das diese Skripte auch???

P.S. das Outlook auf dem Server hat einenm bestimmten Grund um nicht immer den Kram per Owa zu machen.
Bitte warten ..
Mitglied: wiesi200
05.01.2014 um 22:20 Uhr
Und trotzdem hat Outlook nichts darauf verloren.
Bitte warten ..
Mitglied: colinardo
05.01.2014 um 23:57 Uhr
Zitat von heiser89:

Was ich noch erwähnen muss ist: wenn sich keine PDF Datei in dem Ordner befindet, dann soll auch keine Email raus gehen.
Können das diese Skripte auch???
Logisch !
Bitte warten ..
Mitglied: colinardo
LÖSUNG 06.01.2014, aktualisiert 12.01.2014
So, hier hast du etwas was du benutzen kannst:
Du besorgst dir BLAT und speicherst es in einem Verzeichnis. Dann gibst du in Zeile 1 den Pfad zu den PDF-Dateien an, in Zeile 2 den Pfad in den die versendeten PDF-Dateien verschoben werden sollen und in Zeile 3 den Pfad zur BLAT.EXE an. In Zeile 17 passt du dann die Parameter zum Verschicken der Mail (Mailserver, Username, Passwort,Betreff, etc). Falls du die verschickten PDF-Dateien lieber löschen möchtest kannst du die entsprechend kommentierten Zeilen im Script auskommentieren und die für den Verschiebe-Vorgang auskommentieren.

VBS-Script

01.
FOLDER_PDF = "C:\temp\source" 
02.
FOLDER_MOVE = "C:\Temp\target" 
03.
PATH_BLAT = "D:\Download\Blat\blat.exe" 
04.
 
05.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
06.
strPDFs = "" 
07.
For Each file In fso.GetFolder(FOLDER_PDF).Files 
08.
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then 
09.
		If strPDFs <> "" Then 
10.
			strPDFs = strPDFs & ",""" & file.Path & """"  
11.
		Else 
12.
			strPDFs = """" & file.Path & """"  
13.
		End If 
14.
	End If 
15.
Next 
16.
If strPDFs <> "" Then 
17.
	sendNewMailViaBlat "sender@mail.de","empfänger@mail.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs",strPDFs,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD" 
18.
	 
19.
	'PDFs in einen anderen Ordner verschieben 
20.
	For Each pdf In Split(strPDFs,",",-1,1) 
21.
		pdf = Replace(pdf,"""","",1,-1,1) 
22.
		fso.MoveFile pdf , FOLDER_MOVE & "\" 
23.
	Next 
24.
	'Alternativ Wenn die Dateien gelöscht werden sollen: 
25.
'	For Each pdf In Split(strPDFs,",",-1,1) 
26.
'		pdf = Replace(pdf,"""","",1,-1,1) 
27.
'		fso.DeleteFile pdf,True 
28.
'	Next 
29.
End If 
30.
 
31.
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS) 
32.
    Set objShell = CreateObject("WScript.Shell") 
33.
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach " & strAttachments ,0,True 
34.
    set objShell = Nothing 
35.
End Function
Grüße Uwe
Bitte warten ..
Mitglied: heiser89
12.01.2014 um 21:36 Uhr
sauber vielen vielen dank genau das was ich gesucht habe ;)
Bitte warten ..
Mitglied: modernsolution
03.06.2014 um 03:43 Uhr
Hallo ich kann dieses Script auch sehr gut gebrauchen .... Wichtig wäre für mich das die pdf Dateien einzeln verschickt werden.... Es dürfen nicht mehrere pdf Dateien in einer Email angehangen werden..... Vielen Dank im Voraus schon mal für die Hilfe. Lg Timo
Bitte warten ..
Mitglied: colinardo
03.06.2014, aktualisiert um 08:36 Uhr
Zitat von modernsolution:
Hallo ich kann dieses Script auch sehr gut gebrauchen .... Wichtig wäre für mich das die pdf Dateien einzeln verschickt
werden.... Es dürfen nicht mehrere pdf Dateien in einer Email angehangen werden.....
01.
FOLDER_PDF = "C:\temp\source" 
02.
FOLDER_MOVE = "C:\Temp\target" 
03.
PATH_BLAT = "D:\Download\Blat\blat.exe" 
04.
 
05.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
06.
For Each file In fso.GetFolder(FOLDER_PDF).Files 
07.
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then 
08.
		sendNewMailViaBlat "sender@mail.de","empfänger@mail.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs", file.Path,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD" 
09.
		fso.MoveFile file.Path , FOLDER_MOVE & "\" 
10.
	End If 
11.
Next 
12.
		 
13.
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS) 
14.
    Set objShell = CreateObject("WScript.Shell") 
15.
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True 
16.
    set objShell = Nothing 
17.
End Function
Viel Spaß
Grüße Uwe
Bitte warten ..
Mitglied: modernsolution
03.06.2014 um 09:12 Uhr
Hi Uwe danke für die schnelle Reaktion .... Über Nacht ist mir noch eine bessere Idee gekommen ... Sry das mir das nun erst einfällt. :/

Super wäre es wenn das Script erst die Dateien einzeln an belege@modernsolution-Shop.de schickt dann alle pdfs des Ordners sowohl an info@modernsolution.de sowie an xxx@xxx.de schickt... Super wäre es wenn ich eine vorgefertigte Nachricht wie "anbei erhalten sie alle Rechnung" an die beiden Adressen wo alle pdfs auf einmal hingehen anheften kann. Danach soll er einen Ordner mit dem aktuellen Datum und Uhrzeit erstellen und die pdfs dort rein verschieben ... bekommst du das hin?

Dank dir schon mal im Vorfeld

Lg Timo
Bitte warten ..
Mitglied: colinardo
10.06.2014, aktualisiert um 14:04 Uhr
Über Nacht ist mir noch eine bessere Idee gekommen
Das nächste mal bitte direkt so wie es gewünscht ist, das ist hier ja kein Wunschkonzert!
Mit den beiden obigen Threads hättest du dir das aber eigentlich auch einfach zusammenkopieren können.
Ausnahmsweise drück ich nochmal ein Auge zu weil du hier neu bist::
01.
' ------------------------- 
02.
'Ordner in dem die PDF Dateien liegen 
03.
FOLDER_PDF = "C:\temp\source" 
04.
' Ordner in dem Unterordner mit Datum erstellt werden und die PDFs dort rein verschoben werden 
05.
FOLDER_MOVE = "C:\Temp\target" 
06.
'Pfad zur BLAT.exe 
07.
PATH_BLAT = "D:\Ordner\Blat\blat.exe" 
08.
' Mailserverdaten: 
09.
SMTP_SENDER = "user@domain.de" 
10.
SMTP_SERVER = "smtp.mailserver.de" 
11.
SMTP_USERNAME = "USERNAME" 
12.
SMTP_PASSWORD = "PASSWORD" 
13.
' ------------------------- 
14.
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 
15.
strPDFs = "" 
16.
For Each file In fso.GetFolder(FOLDER_PDF).Files 
17.
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then 
18.
		'für jedes PDF eine einzelene Mail veschicken 
19.
		sendNewMailViaBlat SMTP_SENDER,"belege@modernsolution-Shop.de","Neuer Beleg","Im Anhang finden sie den Beleg als PDF", """" &  file.Path & """",SMTP_SERVER,SMTP_USERNAME,SMTP_PASSWORD 
20.
		If strPDFs <> "" Then 
21.
			strPDFs = strPDFs & ",""" & file.Path & """"  
22.
		Else 
23.
			strPDFs = """" & file.Path & """"  
24.
		End If 
25.
	End If 
26.
Next 
27.
If strPDFs <> "" Then 
28.
	' Alle PDFs in einer Mail zusammenfassen und verschicken 
29.
	sendNewMailViaBlat SMTP_SENDER,"info@modernsolution.de,xxx@xxx.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs",strPDFs,SMTP_SERVER,SMTP_USERNAME,SMTP_PASSWORD 
30.
	 
31.
	'PDFs in einen Ordner mit  dem aktuellen Datum verschieben 
32.
	For Each pdf In Split(strPDFs,",",-1,1) 
33.
		pdf = Replace(pdf,"""","",1,-1,1) 
34.
		dateFolder = FOLDER_MOVE & "\" & FormatDateTime(Now(),vbShortDate) 
35.
		If Not fso.FolderExists(dateFolder) Then  
36.
			fso.CreateFolder(dateFolder) 
37.
		End If 
38.
		fso.MoveFile pdf , dateFolder & "\" 
39.
	Next 
40.
End If 
41.
 
42.
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS) 
43.
    Set objShell = CreateObject("WScript.Shell") 
44.
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach " & strAttachments ,0,True 
45.
    set objShell = Nothing 
46.
End Function
Grüße Uwe
Bitte warten ..
Mitglied: modernsolution
10.06.2014 um 13:37 Uhr
Hi Uwe,

entschuldige bitte meine Ungeduld und vielen Dank noch einmal für deine Antwort.

Nun habe ich den Quellcode in eine TXT gepackt und umgeschrieben..... wie kann ich diese denn nun ausführen lassen ?

Habe früher alles immer per .bat datei gemacht und dann mit dem windows aufgabenplaner täglich gestartet

Lg timo
Bitte warten ..
Mitglied: colinardo
10.06.2014, aktualisiert um 13:40 Uhr
Die Textdatei mit der Endung *.vbs versehen und per Doppelklick ausführen ... Im Aufgabenplaner lassen sie diese Scripte ebenfalls hinterlegen (auf die benötigten Rechte achten!).
Bitte warten ..
Mitglied: modernsolution
10.06.2014 um 13:59 Uhr
also die gesammelten Emails funktionieren soweit wie angedacht .... jedoch der empfänger wo alle pdf´s einzeln versandt sollen kommt nur die 1. von 4 pdf´s als mail an ... die anderen 3 kommen nicht an.
Bitte warten ..
Mitglied: colinardo
10.06.2014 um 14:05 Uhr
hatte ich zwei Anführungszeichen vergessen ... ist oben korrigiert.
Bitte warten ..
Mitglied: modernsolution
10.06.2014 um 14:09 Uhr
ah super geil funktioniert vielen lieben dank noch mal !

Liebe grüße

Timo
Bitte warten ..
Mitglied: mcknife82
23.06.2014 um 10:43 Uhr
Hallo colinardo,

das script ist echt der hammer, danke dafür.

ich hatte eine kleine erweiterung die mir o nicht gelingt in dein script einzubauen.

Ich habe einen Ordner in dem liegen viele PDF´s immer mit den dateinamen 0001MM.pdf die 4 Stellige zahl ist fortlaufend und die Buchstaben sind 2 oder 3 Stellig.

Kann man irgendwie das Kürzel auslesen und dann anhand des kürzel die email adresse vergeben.

Also zum beispiel die datei 0001MM.pdf soll an markus müller versendet werden und die datei 0002TB.pdf soll an Thomas Beyer versendet werden.

Ich hoffe du kannst mir helfen.

Vielen Dank
Bitte warten ..
Mitglied: colinardo
23.06.2014, aktualisiert um 11:07 Uhr
Hallo mcknife,
das script ist echt der hammer, danke dafür.
schön wenn's dir hilft, ansonsten nichts besonderes
Kann man irgendwie das Kürzel auslesen und dann anhand des kürzel die email adresse vergeben.
sicher, du hinterlegst die Mailadressen mit Ihren Kürzeln in einem Dictionary-Objekt dann extrahiert man die Buchstaben und wählt den Eintrag aus dem Dictionary für die Mailadresse.

Hier ein Beispiel:
01.
FOLDER_PDF = "C:\temp\source" 
02.
FOLDER_MOVE = "C:\temp\target" 
03.
PATH_BLAT = "D:\Download\Blat\blat.exe" 
04.
 
05.
' Dictionary mit den Mailadressen und Kürzeln erstellen 
06.
Set oDic = CreateObject("scripting.dictionary") 
07.
oDic.Add "MM","maxmuster@domain.de" 
08.
oDic.Add "HM","helenemuster@domain.de" 
09.
 
10.
Set fso = CreateObject("Scripting.Filesystemobject") 
11.
For Each file In fso.GetFolder(FOLDER_PDF).Files 
12.
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then 
13.
		'Kuerzel ermitteln 
14.
		kuerzel = UCase(Mid(fso.GetBaseName(file.Path),5)) 
15.
		' Wenn Kürzel im Dictionary existiert dann sende Mail 
16.
		If oDic.Exists(kuerzel) Then 
17.
			strMail = oDic.Item(kuerzel) 
18.
			sendNewMailViaBlat "sender@mail.de",strMail,"Neue PDFs eingetroffen","Im Anhang Ihre PDFs", file.Path,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD" 
19.
			fso.MoveFile file.Path , FOLDER_MOVE & "\" 
20.
		End If 
21.
	End If 
22.
Next 
23.
		 
24.
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS) 
25.
    Set objShell = CreateObject("WScript.Shell") 
26.
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True 
27.
    set objShell = Nothing 
28.
End Function


Grüße Uwe
Bitte warten ..
Mitglied: mcknife82
23.06.2014 um 11:55 Uhr
danke klappt soweit nur wenn eine datei mit dem selben kuerzel nochmals vorkommt versendet er keine mail.
beispiel 0001MM.pdf und 0037MM.pdf dann kommt nur eine mail mit 0001MM.pdf an
Bitte warten ..
Mitglied: colinardo
23.06.2014, aktualisiert um 11:59 Uhr
kann ich hier nicht nachstellen, geht hier einwandfrei ...
Bitte warten ..
Mitglied: mcknife82
23.06.2014 um 13:47 Uhr
danke funktioniert super,
ich habe das script noch um eine abfrage nach einem neuen Ordner erweitert.

wenn du mir sagst wie ich diesen quellcode hier reinbekomme dann stelle ich diesen hier zur verfügung.
Bitte warten ..
Mitglied: colinardo
23.06.2014, aktualisiert um 13:50 Uhr
Zitat von mcknife82:
wenn du mir sagst wie ich diesen quellcode hier reinbekomme dann stelle ich diesen hier zur verfügung.
Nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>
Bitte warten ..
Mitglied: mcknife82
23.06.2014 um 13:50 Uhr
01.
FOLDER_PDF = "quelle" 
02.
 
03.
PATH_BLAT = "pfad zu blat.exe" 
04.
 
05.
'Nach dem Versenden pdf in den neu erstellten ordner verschieben 
06.
Dim objFSO, newDIR, neuName 
07.
 
08.
'Eingabefenster für den neuen Ordner 
09.
neuName = InputBox("Bitte neuen Ordnernamen eingeben: PDF´s werden nach dem versenden in diesen dann Verschoben ") 
10.
if neuName = "" then WScript.Quit 
11.
 
12.
ziel="pfad_zu_neuem_ordner\" & neuName 
13.
 
14.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
15.
 
16.
if objFSO.Folderexists(ziel) = false then 
17.
 
18.
Set newDIR = objFSO.CreateFolder(ziel) 
19.
 
20.
end if 
21.
 
22.
 
23.
 
24.
' Dictionary mit den Mailadressen und Kürzeln erstellen 
25.
Set oDic = CreateObject("scripting.dictionary") 
26.
oDic.Add "MM","maxmustermann@mailserver.de" 
27.
oDic.Add "SM","SabineMueller.de" 
28.
 
29.
 
30.
Set fso = CreateObject("Scripting.Filesystemobject") 
31.
For Each file In fso.GetFolder(FOLDER_PDF).Files 
32.
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then 
33.
		'Kuerzel ermitteln 
34.
		kuerzel = UCase(Mid(fso.GetBaseName(file.Path),5)) 
35.
		' Wenn Kürzel im Dictionary existiert dann sende Mail 
36.
		If oDic.Exists(kuerzel) Then 
37.
			strMail = oDic.Item(kuerzel) 
38.
			sendNewMailViaBlat "sender@mail.de",strMail,"Neue PDFs eingetroffen","Im Anhang Ihre PDFs", file.Path,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD" 
39.
 
40.
 
41.
 
42.
 
43.
        	fso.MoveFile file.Path , newDIR & "\" 
44.
		End If 
45.
	End If 
46.
Next 
47.
 
48.
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS) 
49.
    Set objShell = CreateObject("WScript.Shell") 
50.
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True 
51.
    set objShell = Nothing 
52.
End Function
Bitte warten ..
Mitglied: ECHAJUE
17.12.2014 um 14:58 Uhr
Hallo zusammen,

Ich bin in einem mittelständischen Unternehmen u. a. für die IT verantwortlich und bin auf der Suche nach einer Lösung für nachfolgend beschriebene Aufgabenstellung auf diesen Beitrag gestoßen und hoffe es wird mir verziehen, dass ich diesen nochmals aktiviere.

Unser System generiert bei Mengenänderungen einen Änderungsbeleg, der aktuell auf einen bestimmten Drucker bereitgestellt wird. Dieser Beleg soll jetzt in PDF-Form an einen def. Kreis per eMail versendet werden.

Lösungsansatz: Die Belege werden per PDF24PDF in einen Folder abgestellt. Pro Änderung/Artikel eine Datei!

Problem: Der Verteilerkreis erhält jetzt u.U. eine Mail mit vielen Einzeldateien die vom Dateinamen alle weitestgehend gleichlautend sind.

Änderung.pdf
Änderung(1).pdf
Änderung(2).pdf
….

Die aufgezeigte Lösung von Uwe (colinardo) trifft schon sehr gut die benötigte Lösung und würde soweit auch funktionieren.

Gesucht wird jetzt eine Möglichkeit mit der alle Einzeldateien in eine PDF-Datei zusammengeführt werden und dann als Einzeldatei per Mail an den Verteilerkreis gesendet wird. Die Einzeldateien können dann gelöscht werden. Dies hätte den Vorteil, dass die User innerhalb der Datei die Suchenfunktion verwendet könnten und nicht jedes PDF einzeln öffnen müssten.

Prima wäre, wenn die Datei nach dem versenden noch in einen Archiv-Ordner verschoben wird.

Nachdem ich leider keine Kenntnisse mit VBS habe, wäre es perfekt, wenn ich hier Unterstützung finden würde.

Vorab vielen Dank!

Jürgen
Bitte warten ..
Mitglied: colinardo
17.12.2014, aktualisiert 11.02.2015
Hallo Jürgen,
kein Problem. Das Kombinieren der PDFs kannst du mit dem frei erhältlichen Kommandozeilentool PDFTK machen. Das lädst du dir herunter und gibst den Pfad zur pdftk.exe in Zeile 4 des Scripts an. Die Zeile die die Mail verschickt(29) musst du natürlich an deine Umgebung anpassen (SMTP-Server, Mailadressen etc)
Kombiniere mehrere PDF-Dateien in eine, verschicke sie per Mail und lösche die einzelnen PDF-Dateien und Archiviere das kombinierte PDF.
01.
Const FOLDER_PDF = "C:\temp\source\pdf" 
02.
Const FOLDER_MOVE = "C:\Temp\target" 
03.
Const PATH_BLAT = "D:\Blat\blat.exe" 
04.
Const PATH_PDFTK = "D:\pdftk\pdftk.exe"       ' "https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit" 
05.
 
06.
'Variablen 
07.
Dim intPDFCount 
08.
 
09.
'Objekte 
10.
Set fso = CreateObject("Scripting.Filesystemobject") 
11.
Set objShell = CreateObject("Wscript.Shell") 
12.
 
13.
'Prüfe ob PDF-Dateien im Ordner vorhanden sind 
14.
For Each file In fso.GetFolder(FOLDER_PDF).Files 
15.
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then 
16.
		intPDFCount = intPDFCount + 1 
17.
	End If 
18.
Next 
19.
'Wenn PDF Datein vorhanden ... 
20.
If intPDFCount > 0 Then 
21.
	'Datum was an das kombinierte PDF angehangen wird 
22.
	strDate = Year(Date) & Month(Date) & Day(Date) & "_" & Hour(Now) & Minute(Now) & Second(Now) 
23.
	'Pfad für das kombinierte PDF 
24.
	strPathPDFCombined = FOLDER_MOVE & "\Änderungen_" & strDate & ".pdf" 
25.
	'kombiniere die PDF-Dateien in ein einzelnes PDF 
26.
	objShell.Run """" & PATH_PDFTK & """ """ & FOLDER_PDF & "\*.pdf"" cat output """ & strPathPDFCombined & """", 0, True 
27.
 
28.
	'Mail via Blat verschicken 
29.
	sendNewMailViaBlat "sender@mail.de","empfänger@mail.de","Änderungen","Im Anhang ist das PDF mit den Änderungen!",strPathPDFCombined,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD" 
30.
	 
31.
	'Einzelne PDF-Dateien löschen 
32.
	fso.DeleteFile FOLDER_PDF & "\*.pdf",True 
33.
End If 
34.
 
35.
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS) 
36.
     objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True 
37.
    set objShell = Nothing 
38.
End Function
Viel Spaß
Grüße Uwe
Bitte warten ..
Mitglied: ECHAJUE
18.12.2014 um 12:41 Uhr
Hallo Uwe,

für Deine superschnelle Reaktion herzlichen Dank! Habe Dein Script entsprechend um die notwendigen Daten ergänzt.

Die abgelegten Dateien im Ordner "Source" werden entfernt, tauchen jedoch nicht im Ordner "Target" auf. Auch erhalte ich noch keine Mail!

Gibt es eine Möglichkeit die einzelnen Schritte des Scriptes mitzuverfolgen?

Muss der Ordner "Folder_PDF" noch angelegt und der Pfad angegeben werden?

Vorab vielen Dank für Deine Unterstützung!!

Gruß
Jürgen
Bitte warten ..
Mitglied: colinardo
18.12.2014, aktualisiert 19.12.2014
Zitat von ECHAJUE:

Die abgelegten Dateien im Ordner "Source" werden entfernt, tauchen jedoch nicht im Ordner "Target" auf.
Das kombinierte PDF wird direkt im Target-Ordner abgelegt !
Auch erhalte ich noch keine Mail!
Dann ist deine Anpassung des Mail-Zeile nicht korrekt an den Mailserver angepasst ... Hier läuft das Script einwandfrei...

Gibt es eine Möglichkeit die einzelnen Schritte des Scriptes mitzuverfolgen?
Da gibt es mehrere Möglichkeiten, entweder du lässt dir an bestimmten Punkten die Werte von Variablen ausgeben oder du benutzt ein Programm was das Debugging unterstützt, wie z.B. http://www.vbsedit.com/ oder du packst den Code in ein MS-Office-Programm und nutzt dort die Debugging-Funktionen.

Muss der Ordner "Folder_PDF" noch angelegt und der Pfad angegeben werden?
ja, das hatte ich jetzt nicht implementiert ..., wäre aber kein Problem wenn das gewünscht ist.

Grüße Uwe
Bitte warten ..
Mitglied: ECHAJUE
19.12.2014 um 16:56 Uhr
Hallo Uwe,

irgendwie komme ich nicht richtig weiter. Wenn ich die Sache jetzt richtig analysiert habe, scheint es daran zu liegen, dass kein kombiniertes PDF im Target ankommt. Jedenfalls wird dort nichts abgelegt. Script wird gestartet, die erzeugten PDFs im Source-Ordner verschwinden auch.

Wenn ich die Zusammführung der Einzeldokumente per *.bat über die pdftk.exe ausführe, klappt dies ohne Probleme. Auch über das von Dir in diesem Beitrag erstellte Srcript klappt das testweise Versenden per blat.exe ohne Probleme.

Nur in der Kombination gibt scheint es Probleme zu geben. Laut VBSEdit läuft Script fehlerfrei durch!!

Wäre prima, wenn Dir hierzu noch ein Lösungsansatz einfällt.

Vorab besten Dank und ein schönes Wochenende.

Gruß
Jürgen
Bitte warten ..
Mitglied: colinardo
19.12.2014, aktualisiert um 17:05 Uhr
Hallo Jürgen,
ein Fehler der bei dir auftreten könnte wäre das generierte Datum für den Namen der kombinierten PDF-Datei ... habe Zeile 22 des Scripts mal universell angepasst. Vermutlich war dein Datum auf Englisch oder ein anderes Format mit Slashes eingestellt, die natürlich nicht in einem Dateinamen vorkommen dürfen, und deswegen das Erzeugen der PDF-Datei fehlgeschlagen ist.

Grüße Uwe
Bitte warten ..
Mitglied: ECHAJUE
19.12.2014, aktualisiert um 18:19 Uhr
Hallo Uwe,

leider immer noch das gleiche Verhalten. Die im Ordner Source befindlichen Einzel-PDFs verschwinden, jedoch kommt im Ordner Target nichts an.Weil dort kein zusammengefügtes PDF liegt findet ja vermutlich auch kein eMail-Versand statt! Richtig?

Fällt Dir sonst noch etwas ein? Bin für jeden Ansatz/Unterstützung dankbar!

Gruß
Jürgen
Bitte warten ..
Mitglied: colinardo
19.12.2014, aktualisiert um 19:11 Uhr
sorry aber hier läuft es einwandfrei, du must bei deiner Anpassung irgendwo einen Fehler eingebaut haben (Bitte die Pfade ohne abschließenden Backslash angeben!)! Ich mach das ganze ja nicht zum ersten mal...

Oder eines deiner PDFs bereitet PDFTK Probleme ...

Bitte folgende Kommentare via Personal Message, damit der Thread hier nicht zugemüllt wird. Merci.
Bitte warten ..
Mitglied: k.arkenau
20.05.2015 um 14:46 Uhr
Hallo,

danke für Dein Script. Ich habe jedoch das Problem, das, wenn ich es ausführen will, die Fehlermeldung erscheint, das unter anderem das kaufmännische & nicht zulässig ist.

Ist das ein Versionsproblem?

Danke & Gruß

k.arkenau
Bitte warten ..
Mitglied: colinardo
20.05.2015, aktualisiert um 15:22 Uhr
Hallo k.arkenau,
das wird dann ein Sonderzeichen-Problem bei der Parameterübergabe an die BLAT-Kommandozeile sein (Betreff oder Body), diese Zeichen müsstest du vorher escapen, durch einen replace.
http://www.robvanderwoude.com/escapechars.php

Grüße Uwe
Bitte warten ..
Mitglied: k.arkenau
20.05.2015 um 15:35 Uhr
Eigentlich meckert er, soweit ich das überblicken kann, jedes "&" an:

Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge z
übergeben.

Vorher sagt er mir noch das hier:

In C:\test\lieferscheine.ps1:7 Zeichen:4

For Each file In fso.GetFolder(FOLDER_PDF).Files

~

Öffnende "(" fehlt nach dem Schlüsselwort "for".
In C:\test\lieferscheine.ps1:8 Zeichen:4

If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then

~

"(" fehlt nach "If" in der "if"-Anweisung.
In C:\test\lieferscheine.ps1:9 Zeichen:5

If strPDFs <> "" Then

~

"(" fehlt nach "If" in der "if"-Anweisung.
In C:\test\lieferscheine.ps1:9 Zeichen:15

If strPDFs <> "" Then

~

Dateispezifikation nach dem Umleitungsoperator fehlt.
In C:\test\lieferscheine.ps1:9 Zeichen:14

If strPDFs <> "" Then

~

Der Operator "<" ist für zukünftige Versionen reserviert.
In C:\test\lieferscheine.ps1:10 Zeichen:22

strPDFs = strPDFs & ",""" & file.Path & """"


Mein Versionsstand ist:

PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.16406
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
Bitte warten ..
Mitglied: colinardo
20.05.2015, aktualisiert um 17:53 Uhr
Mein Versionsstand ist:
PSVersion 4.0
Och nö, du weißt aber schon das das ein VB-Script und kein Powershell ist ?! Steht eigentlich Fett über dem Script, und sollte man merken sobald man Variablen ohne Dollarzeichen sieht

Ich verleihe dir hiermit das goldene Brett vorm Kopf (Man merkt, Pfingsten ist nicht mehr weit ...)

Grüße Uwe
Bitte warten ..
Mitglied: k.arkenau
21.05.2015 um 14:32 Uhr
Hi Uwe,

ich danke für die verdiente Auszeichnung....so blind kann man ja eigentlich nicht sein....aber wahrscheinlich zu sehr auf PowerShell eingeschossen...naja.

Auf jedenfall läuft es jetzt, schickt mir aber keine eMail.

Ich habe in der (hoffentlich) entsprechenden Zeile stehen:

sendNewMailViaBlat "verladung@online.de","k.arkenau@online.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs",strPDFs,"192.168.0.175","",""

Wobei 192.168.0.175 unser Mailserver ist und ohne Benutzernamen und Passwort erreichbar ist (habe ich schon an anderen Stellen so eingesetzt).

Hast Du noch eine Idee für mich?

Danke & schöne Grüße

k.arkenau
Bitte warten ..
Mitglied: colinardo
21.05.2015, aktualisiert um 14:36 Uhr
Hast Du noch eine Idee für mich?
Ja, die Funktion zum Mail Versenden anpassen und die Parameter für Username und Passwort weglassen
01.
objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -attach """ & strAttachments & """" ,0,True 
Bitte warten ..
Mitglied: k.arkenau
21.05.2015 um 16:18 Uhr
Hab Sie jetzt so angepasst:

objShell.Run """" & PATH_BLAT & """" & " -test""" & strSubject & """ -test""" & strBody & """ -k.arkenau8@online.de" & strTo & " -f " & strFrom & " -192.168.0.175l" & strSMTPServer & " -*.pdf""" & strAttachments & """" ,0,True

Aber es gibt ein gemecker, das ein Objekt in Zeile 17, Zeichen 2 ein Objekt erforderlich sei. Was kann das sein?
Bitte warten ..
Mitglied: colinardo
21.05.2015, aktualisiert um 17:54 Uhr
Zitat von k.arkenau:
Hab Sie jetzt so angepasst:
Aber es gibt ein gemecker, das ein Objekt in Zeile 17, Zeichen 2 ein Objekt erforderlich sei. Was kann das sein?
Och nö das geht so natürlich nicht ..., schau dir bitte meinen Code vom letzten Post an ...

Bei weiteren Fragen bitte per PM, damit hier die beteiligten User nicht weiter belästigt werden. Danke.

Grüße Uwe
Bitte warten ..
Mitglied: k.arkenau
22.05.2015 um 08:17 Uhr
Danke Dir...wer blind ist und so weiter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Apache Server
gelöst OsTicket Email versenden klappt nicht (5)

Frage von ClepToManix zum Thema Apache Server ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Drucker und Scanner
Problem mit Ausdruck von PDF Dateien (4)

Frage von CountryBoy zum Thema Drucker und Scanner ...

Visual Studio
gelöst Email Versenden Mit VB (2)

Frage von UltraZz zum Thema Visual Studio ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...