coldzero89
Goto Top

Schleife für Anhänge in Mail.vbs

Weiß selbst nicht ob die Frage zu BASH oder zu VBS gehört, da ich denke das die Frage auf beiden wegen gelöst werden kann - da mein persöhnliches Interesse an Batch größer ist, liegt es bei Batch.

Moinsen,

ich habe hier das altbekannte mail.vbs - tausendfach im Inet zu finden.

Set "M=%temp%\Mailversand.vbs"  
	>"%M%" echo Dim objMail,objConfig,objFields  
	>>"%M%" echo Set objMail = CreateObject("CDO.Message")  
	>>"%M%" echo Set objConfig = CreateObject("CDO.configuration")  
	>>"%M%" echo Set objFields = objConfig.Fields  
	>>"%M%" echo With objFields  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/SendUsing")= 2  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")= "mail.gmx.net"  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")= 1  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/SMTPServerPort")= 25  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "BENUTZERNAME"  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "PASSWORT"  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true  
	>>"%M%" echo   .Update  
	>>"%M%" echo End With  
	>>"%M%" echo With objMail  
	>>"%M%" echo   Set .Configuration = objConfig  
	>>"%M%" echo   .To = "%Mail%"  
	>>"%M%" echo   .From = "XXXX@XXXX"  
	>>"%M%" echo   .Subject = "Ultimativ Wichtiger Kram von Notebook"  
	>>"%M%" echo   .TextBody = "Ultimativ Wichtiger Kram von Notebook"  
	IF EXIST >>"%M%" echo   .AddAttachment "%Send%\*.XX"  
	>>"%M%" echo   .Send  
	>>"%M%" echo End With  

Bei mir auch schon 100 Fach im einsatz.
Nun kam ne Specialanfrage von einem Kollegen. Dieser verschickt ca. 2-3 mal die Woche Datein (doc, txt, gif, bmp, jpg, 7z, etc.) von seinem Notebook an den PC. (Notebook und PC sind Netzwerktechnisch getrennt, da die Notebooks nach außen hin ohne Firefall betrieben werden "müssen" (Es ist der IT zuviel aufwand sämtliche Adressen in die FW einmal einzutragen :D))

Bisher geschah dieses über einen USB Stick. Da die Datein aber maximal 1MB groß sind ist dies bequemer und schneller über E-Mail zu lösen.

Problem was ich nun habe: Wie teile ich dem Script mit bei .AddAttachment das er ALLE Datein im Ordner SEND nehmen soll.

Ich habe dies Zeitweise über mehrere Zeilen von .AddAttachment gelöst und dem Kollegen gesagt er müsse die Datein dann wie folgt benennen (1.gif, 2.gif, etc.) und das dann über IF EXIST gelöst.
Dies ist auf dauer nervig und finde ich selbst nicht schön.

An eine Schleife um den Mailversand habe ich gedacht. Wäre aber auch unangebracht, da dann für JEDE Datei eine Mail versendet wird, 20 Datein = 20 Mails = Doof.

Wie ist es zu realisieren, das alle Datein im Ordner SEND in EINER E-Mail versendet werden?
Wo und Wie ist die schleife zu setzen?
Wäre eine Schleife um genau die Zeile IF EXIST >>"%M%" echo .AddAttachment "%Send%\*.XX" sinnvoll? Sodass in der Schleife die Variable SEND gesetzt wird mit dem kompletten Pfad und dann immer eine Zeile hinzugefügt wird ín die vbs - oder ist dies eleganter zu lösen?
Sofern mein Gedankenansatz der mir gerade kam sinnvoll ist, brauch nur ein JA zu folgen, dann bastel ich das, brauch also keiner für mich zu arbeiten. face-smile
Gruß Zero

Content-ID: 196771

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

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

bastla
bastla 10.01.2013 um 16:39:52 Uhr
Goto Top
Hallo ColdZero89!

JA ...

... nur das "IF EXIST" ist ohne Angabe einer zu prüfenden Datei / eines zu prüfenden Ordners sinnfrei und kann einfach entfallen.

Grüße
bastla
ColdZero89
ColdZero89 10.01.2013 um 16:49:19 Uhr
Goto Top
Moin bastla,

danke für das JA :D

hab ich auch gemerkt als ich grad runterscrollte. Das ist noch die "alte" Version auf meinem PC nicht das was aufm Notebook liegt beim Kollegen und getestet ist.

Das IF Exist werde ich dann ja nicht mehr benötigen.

Danke face-smile Sobald funktionsfähig im Einsatz setz ich das hier als Gelöst mit dem Script.

Gruß Zero
ColdZero89
ColdZero89 10.01.2013 aktualisiert um 17:12:22 Uhr
Goto Top
Moin,

ok ich bin verwundert wieso das nicht so sauber funktioniert.

Abschnitt:
FOR %%F IN ("C:\allerlei\*") do (  
	set Send=%%F
	>>"%M%" echo   .AddAttachment "%Send%"  
	)

Die Schleife an sich geht. Bei Echo on zeigt er alle Datein sauber an das diese als "Send" gesetzt wurden. Ankommen tun aber nur ATXXXXXXXX.bin Datein.
Bei der ausführung von Zeile 3 steht dann aber in der CMD folgendes:

echo .AddAttachment "" 1>>"C:\.........\Mailversand.vbs"

Wieso steht dort nur "" ? Wenn ich den Pfad direkt eingebe funktioniert das ganze sauber.

Gruß Zero
bastla
bastla 10.01.2013 um 17:16:25 Uhr
Goto Top
Hallo ColdZero89!

Eine eigene Variable ist nicht erforderlich (und ohne "delayedExpansion" nicht sinnvoll) - daher einfach
FOR %%F IN ("C:\allerlei\*") do (  
    >>"%M%" echo   .AddAttachment "%%~fF"  
)
Grüße
bastla
ColdZero89
ColdZero89 11.01.2013 um 11:01:10 Uhr
Goto Top
Moinsen,

ah klar... ich beweg mich ja inner schleife und die Datein sind dann ja eh in der Variable.... manchmal bin ich aufn kop gefallen :D

danke dir face-smile

Gruß Zero
ColdZero89
ColdZero89 11.01.2013 aktualisiert um 11:20:02 Uhr
Goto Top
Fertiges Script, es versendet alle Datein in einem Ordner an die gewünschte E-Mailadresse
@echo off & setlocal

rem Changelog
rem 1.0 Mailversand von .gif Datein in einem Ordner
rem 2.0 Schleife eingebaut um alle Dateitypen versenden zu können
rem V2.0 Kevin Lange 11.01.2013

rem ====================================================================
rem Deklarierung
rem ====================================================================
	set "Mail=EMAIL@EMAIL.com"  

rem ====================================================================
rem Erstellung des VBS zum Mailversand
rem ====================================================================
	Set "M=%temp%\Mailversand.vbs"  
	>"%M%" echo Dim objMail,objConfig,objFields  
	>>"%M%" echo Set objMail = CreateObject("CDO.Message")  
	>>"%M%" echo Set objConfig = CreateObject("CDO.configuration")  
	>>"%M%" echo Set objFields = objConfig.Fields  
	>>"%M%" echo With objFields  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/SendUsing")= 2  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")= "mail.gmx.net"  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")= 1  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/SMTPServerPort")= 25  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "SENDER@EMAIL.com"  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "PASSWORT"  
	>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true  
	>>"%M%" echo   .Update  
	>>"%M%" echo End With  
	>>"%M%" echo With objMail  
	>>"%M%" echo   Set .Configuration = objConfig  
	>>"%M%" echo   .To = "%Mail%"  
	>>"%M%" echo   .From = "SENDER@EMAIL.com"  
	>>"%M%" echo   .Subject = "Ultimativ Wichtiger Kram von Notebook"  
	>>"%M%" echo   .TextBody = "Ultimativ Wichtiger Kram von Notebook"  
FOR %%F IN ("C:\allerlei\*.*") do (  
	>>"%M%" echo .AddAttachment "%%~fF"  
	)
	>>"%M%" echo   .Send  
	>>"%M%" echo End With  
	
	echo ____________________________________
	echo Ich versende nun die Dateien an %Mail%. Bitte Warten...
	cscript //nologo "%M%"  
	pause
rem ====================================================================
rem Versendete Anhänge löschen
rem ====================================================================
	 del /Q "C:\allerlei\*"  

Gruß Zero