heiser89
Goto Top

PDF Dateien aus Verzeichnis automatisch per Email versenden

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

Content-ID: 225910

Url: https://administrator.de/forum/pdf-dateien-aus-verzeichnis-automatisch-per-email-versenden-225910.html

Ausgedruckt am: 22.12.2024 um 19:12 Uhr

wiesi200
wiesi200 05.01.2014 aktualisiert um 19:41:23 Uhr
Goto Top
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.

PDF-Datei mit Blat versenden
colinardo
colinardo 05.01.2014 aktualisiert um 20:52:25 Uhr
Goto Top
Hi,
hatte dazu schon mal ein ähnliches Script mit AutoIT geschrieben:
Hilfe!! Script erstellen, das 2 Dateien prüfen soll und dann als email zb. mit blat versenden.
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:
Suche eine Batch,Tool oder Programm zum umbenennen von Dateien
Hier muss dann nur noch die Mail-Routine ergänzt werden. Ist aber auch kein Problem, kann ich dir gerne anpassen.

Grüße Uwe
heiser89
heiser89 05.01.2014 aktualisiert um 22:17:24 Uhr
Goto Top
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.
wiesi200
wiesi200 05.01.2014 um 22:20:51 Uhr
Goto Top
Und trotzdem hat Outlook nichts darauf verloren.
colinardo
colinardo 05.01.2014 um 23:57:03 Uhr
Goto Top
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 !
colinardo
Lösung colinardo 06.01.2014, aktualisiert am 12.01.2014 um 21:34:16 Uhr
Goto Top
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.
back-to-topVBS-Script
FOLDER_PDF = "C:\temp\source"  
FOLDER_MOVE = "C:\Temp\target"  
PATH_BLAT = "D:\Download\Blat\blat.exe"  

Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
strPDFs = ""  
For Each file In fso.GetFolder(FOLDER_PDF).Files
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then  
		If strPDFs <> "" Then  
			strPDFs = strPDFs & ",""" & file.Path & """"   
		Else
			strPDFs = """" & file.Path & """"   
		End If
	End If
Next
If strPDFs <> "" Then  
	sendNewMailViaBlat "sender@mail.de","empfänger@mail.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs",strPDFs,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD"  
	
	'PDFs in einen anderen Ordner verschieben  
	For Each pdf In Split(strPDFs,",",-1,1)  
		pdf = Replace(pdf,"""","",1,-1,1)  
		fso.MoveFile pdf , FOLDER_MOVE & "\"  
	Next
	'Alternativ Wenn die Dateien gelöscht werden sollen:  
'	For Each pdf In Split(strPDFs,",",-1,1)  
'		pdf = Replace(pdf,"""","",1,-1,1)  
'		fso.DeleteFile pdf,True  
'	Next  
End If

Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS)
    Set objShell = CreateObject("WScript.Shell")  
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach " & strAttachments ,0,True  
    set objShell = Nothing
End Function
Grüße Uwe
heiser89
heiser89 12.01.2014 um 21:36:35 Uhr
Goto Top
sauber vielen vielen dank genau das was ich gesucht habe ;)
modernsolution
modernsolution 03.06.2014 um 03:43:19 Uhr
Goto Top
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
colinardo
colinardo 03.06.2014 aktualisiert um 08:36:22 Uhr
Goto Top
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.....
FOLDER_PDF = "C:\temp\source"  
FOLDER_MOVE = "C:\Temp\target"  
PATH_BLAT = "D:\Download\Blat\blat.exe"  

Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
For Each file In fso.GetFolder(FOLDER_PDF).Files
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then  
		sendNewMailViaBlat "sender@mail.de","empfänger@mail.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs", file.Path,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD"  
		fso.MoveFile file.Path , FOLDER_MOVE & "\"  
	End If
Next
		
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS)
    Set objShell = CreateObject("WScript.Shell")  
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True  
    set objShell = Nothing
End Function
Viel Spaß
Grüße Uwe
modernsolution
modernsolution 03.06.2014 um 09:12:13 Uhr
Goto Top
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 ...face-smile bekommst du das hin?

Dank dir schon mal im Vorfeld

Lg Timo
colinardo
colinardo 10.06.2014 aktualisiert um 14:04:54 Uhr
Goto Top
Ü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::
' -------------------------  
'Ordner in dem die PDF Dateien liegen  
FOLDER_PDF = "C:\temp\source"  
' Ordner in dem Unterordner mit Datum erstellt werden und die PDFs dort rein verschoben werden  
FOLDER_MOVE = "C:\Temp\target"  
'Pfad zur BLAT.exe  
PATH_BLAT = "D:\Ordner\Blat\blat.exe"  
' Mailserverdaten:  
SMTP_SENDER = "user@domain.de"  
SMTP_SERVER = "smtp.mailserver.de"  
SMTP_USERNAME = "USERNAME"  
SMTP_PASSWORD = "PASSWORD"  
' -------------------------  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
strPDFs = ""  
For Each file In fso.GetFolder(FOLDER_PDF).Files
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then  
		'für jedes PDF eine einzelene Mail veschicken  
		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  
		If strPDFs <> "" Then  
			strPDFs = strPDFs & ",""" & file.Path & """"   
		Else
			strPDFs = """" & file.Path & """"   
		End If
	End If
Next
If strPDFs <> "" Then  
	' Alle PDFs in einer Mail zusammenfassen und verschicken  
	sendNewMailViaBlat SMTP_SENDER,"info@modernsolution.de,xxx@xxx.de","Neue PDFs eingetroffen","Im Anhang Ihre PDFs",strPDFs,SMTP_SERVER,SMTP_USERNAME,SMTP_PASSWORD  
	
	'PDFs in einen Ordner mit  dem aktuellen Datum verschieben  
	For Each pdf In Split(strPDFs,",",-1,1)  
		pdf = Replace(pdf,"""","",1,-1,1)  
		dateFolder = FOLDER_MOVE & "\" & FormatDateTime(Now(),vbShortDate)  
		If Not fso.FolderExists(dateFolder) Then 
			fso.CreateFolder(dateFolder)
		End If
		fso.MoveFile pdf , dateFolder & "\"  
	Next
End If

Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS)
    Set objShell = CreateObject("WScript.Shell")  
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach " & strAttachments ,0,True  
    set objShell = Nothing
End Function
Grüße Uwe
modernsolution
modernsolution 10.06.2014 um 13:37:20 Uhr
Goto Top
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
colinardo
colinardo 10.06.2014 aktualisiert um 13:40:39 Uhr
Goto Top
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!).
modernsolution
modernsolution 10.06.2014 um 13:59:45 Uhr
Goto Top
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.
colinardo
colinardo 10.06.2014 um 14:05:18 Uhr
Goto Top
hatte ich zwei Anführungszeichen vergessen ... ist oben korrigiert.
modernsolution
modernsolution 10.06.2014 um 14:09:05 Uhr
Goto Top
ah super geil funktioniert face-smile vielen lieben dank noch mal !

Liebe grüße

Timo
mcknife82
mcknife82 23.06.2014 um 10:43:42 Uhr
Goto Top
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
colinardo
colinardo 23.06.2014 aktualisiert um 11:07:32 Uhr
Goto Top
Hallo mcknife,
das script ist echt der hammer, danke dafür.
schön wenn's dir hilft, ansonsten nichts besonderes face-wink
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:
FOLDER_PDF = "C:\temp\source"  
FOLDER_MOVE = "C:\temp\target"  
PATH_BLAT = "D:\Download\Blat\blat.exe"  

' Dictionary mit den Mailadressen und Kürzeln erstellen  
Set oDic = CreateObject("scripting.dictionary")  
oDic.Add "MM","maxmuster@domain.de"  
oDic.Add "HM","helenemuster@domain.de"  

Set fso = CreateObject("Scripting.Filesystemobject")  
For Each file In fso.GetFolder(FOLDER_PDF).Files
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then  
		'Kuerzel ermitteln  
		kuerzel = UCase(Mid(fso.GetBaseName(file.Path),5))
		' Wenn Kürzel im Dictionary existiert dann sende Mail  
		If oDic.Exists(kuerzel) Then
			strMail = oDic.Item(kuerzel)
			sendNewMailViaBlat "sender@mail.de",strMail,"Neue PDFs eingetroffen","Im Anhang Ihre PDFs", file.Path,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD"  
			fso.MoveFile file.Path , FOLDER_MOVE & "\"  
		End If
	End If
Next
		
Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS)
    Set objShell = CreateObject("WScript.Shell")  
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True  
    set objShell = Nothing
End Function



Grüße Uwe
mcknife82
mcknife82 23.06.2014 um 11:55:48 Uhr
Goto Top
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
colinardo
colinardo 23.06.2014 aktualisiert um 11:59:15 Uhr
Goto Top
kann ich hier nicht nachstellen, geht hier einwandfrei ...
mcknife82
mcknife82 23.06.2014 um 13:47:20 Uhr
Goto Top
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.
colinardo
colinardo 23.06.2014 aktualisiert um 13:50:08 Uhr
Goto Top
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>
mcknife82
mcknife82 23.06.2014 um 13:50:07 Uhr
Goto Top
FOLDER_PDF = "quelle"  

PATH_BLAT = "pfad zu blat.exe"  

'Nach dem Versenden pdf in den neu erstellten ordner verschieben  
Dim objFSO, newDIR, neuName

'Eingabefenster für den neuen Ordner  
neuName = InputBox("Bitte neuen Ordnernamen eingeben: PDF´s werden nach dem versenden in diesen dann Verschoben ")  
if neuName = "" then WScript.Quit  

ziel="pfad_zu_neuem_ordner\" & neuName  

Set objFSO = CreateObject("Scripting.FileSystemObject")  

if objFSO.Folderexists(ziel) = false then

Set newDIR = objFSO.CreateFolder(ziel)

end if



' Dictionary mit den Mailadressen und Kürzeln erstellen  
Set oDic = CreateObject("scripting.dictionary")  
oDic.Add "MM","maxmustermann@mailserver.de"  
oDic.Add "SM","SabineMueller.de"  


Set fso = CreateObject("Scripting.Filesystemobject")  
For Each file In fso.GetFolder(FOLDER_PDF).Files
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then  
		'Kuerzel ermitteln  
		kuerzel = UCase(Mid(fso.GetBaseName(file.Path),5))
		' Wenn Kürzel im Dictionary existiert dann sende Mail  
		If oDic.Exists(kuerzel) Then
			strMail = oDic.Item(kuerzel)
			sendNewMailViaBlat "sender@mail.de",strMail,"Neue PDFs eingetroffen","Im Anhang Ihre PDFs", file.Path,"smtp.mailserver.de","SMTP-USERNAME","SMTP-PASSWORD"  




        	fso.MoveFile file.Path , newDIR & "\"  
		End If
	End If
Next

Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS)
    Set objShell = CreateObject("WScript.Shell")  
    objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True  
    set objShell = Nothing
End Function
ECHAJUE
ECHAJUE 17.12.2014 um 14:58:23 Uhr
Goto Top
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
colinardo
colinardo 17.12.2014, aktualisiert am 11.02.2015 um 15:02:17 Uhr
Goto Top
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)
back-to-topKombiniere mehrere PDF-Dateien in eine, verschicke sie per Mail und lösche die einzelnen PDF-Dateien und Archiviere das kombinierte PDF.
Const FOLDER_PDF = "C:\temp\source\pdf"  
Const FOLDER_MOVE = "C:\Temp\target"  
Const PATH_BLAT = "D:\Blat\blat.exe"  
Const PATH_PDFTK = "D:\pdftk\pdftk.exe"       ' "https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit"  

'Variablen  
Dim intPDFCount

'Objekte  
Set fso = CreateObject("Scripting.Filesystemobject")  
Set objShell = CreateObject("Wscript.Shell")  

'Prüfe ob PDF-Dateien im Ordner vorhanden sind  
For Each file In fso.GetFolder(FOLDER_PDF).Files
	If LCase(fso.GetExtensionName(file.Path)) = "pdf" Then  
		intPDFCount = intPDFCount + 1
	End If
Next
'Wenn PDF Datein vorhanden ...  
If intPDFCount > 0 Then
	'Datum was an das kombinierte PDF angehangen wird  
	strDate = Year(Date) & Month(Date) & Day(Date) & "_" & Hour(Now) & Minute(Now) & Second(Now)  
	'Pfad für das kombinierte PDF  
	strPathPDFCombined = FOLDER_MOVE & "\Änderungen_" & strDate & ".pdf"  
	'kombiniere die PDF-Dateien in ein einzelnes PDF  
	objShell.Run """" & PATH_PDFTK & """ """ & FOLDER_PDF & "\*.pdf"" cat output """ & strPathPDFCombined & """", 0, True  

	'Mail via Blat verschicken  
	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"  
	
	'Einzelne PDF-Dateien löschen  
	fso.DeleteFile FOLDER_PDF & "\*.pdf",True  
End If

Function sendNewMailViaBlat(strFrom,strTo,strSubject,strBody,strAttachments,strSMTPServer,strSMTP_USER,strSMTP_PASS)
     objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -u """ & strSMTP_USER & """ -pw """ & strSMTP_PASS & """ -attach """ & strAttachments & """" ,0,True  
    set objShell = Nothing
End Function
Viel Spaß
Grüße Uwe
ECHAJUE
ECHAJUE 18.12.2014 um 12:41:44 Uhr
Goto Top
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
colinardo
colinardo 18.12.2014, aktualisiert am 19.12.2014 um 15:33:20 Uhr
Goto Top
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
ECHAJUE
ECHAJUE 19.12.2014 um 16:56:41 Uhr
Goto Top
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
colinardo
colinardo 19.12.2014 aktualisiert um 17:05:28 Uhr
Goto Top
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
ECHAJUE
ECHAJUE 19.12.2014 aktualisiert um 18:19:30 Uhr
Goto Top
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
colinardo
colinardo 19.12.2014 aktualisiert um 19:11:14 Uhr
Goto Top
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.
k.arkenau
k.arkenau 20.05.2015 um 14:46:43 Uhr
Goto Top
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
colinardo
colinardo 20.05.2015 aktualisiert um 15:22:37 Uhr
Goto Top
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
k.arkenau
k.arkenau 20.05.2015 um 15:35:00 Uhr
Goto Top
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

back-to-topFor Each file In fso.GetFolder(FOLDER_PDF).Files

back-to-top~

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

back-to-topIf LCase(fso.GetExtensionName(file.Path)) = "pdf" Then

back-to-top~

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

back-to-topIf strPDFs <> "" Then

back-to-top~

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

back-to-topIf strPDFs <> "" Then

back-to-top~

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

back-to-topIf strPDFs <> "" Then

back-to-top~

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

back-to-topstrPDFs = 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
colinardo
colinardo 20.05.2015 aktualisiert um 17:53:05 Uhr
Goto Top
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 face-wink

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

Grüße Uwe
k.arkenau
k.arkenau 21.05.2015 um 14:32:03 Uhr
Goto Top
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
colinardo
colinardo 21.05.2015 aktualisiert um 14:36:33 Uhr
Goto Top
Hast Du noch eine Idee für mich?
Ja, die Funktion zum Mail Versenden anpassen und die Parameter für Username und Passwort weglassen face-wink
objShell.Run """" & PATH_BLAT & """" & " -subject """ & strSubject & """ -body """ & strBody & """ -to " & strTo & " -f " & strFrom & " -server " & strSMTPServer & " -attach """ & strAttachments & """" ,0,True   
k.arkenau
k.arkenau 21.05.2015 um 16:18:39 Uhr
Goto Top
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?
colinardo
colinardo 21.05.2015 aktualisiert um 17:54:26 Uhr
Goto Top
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
k.arkenau
k.arkenau 22.05.2015 um 08:17:35 Uhr
Goto Top
Danke Dir...wer blind ist und so weiter face-smile