coldzero89
Goto Top

Vorhandenes Batch und VBS um Mailversand erweitern

Moinsen,

stand sind die beiden Scripte wie in meiner anderen Frage (Per Batch einer CSV-Datei Zeilen verpassen).

Diese sollen nun um einen Mailversand mit externer E-Mailadresse erweitert werden.

Der Mailversand soll aber erst NACH der Verarbeitung stattfinden.

Ich hab sowas mal mit VBS gesehen und ein fertiges Script benutzt, es mir nur nie rückgesichert.

Daher wie erweitere ich vernünftig meine Scripte um den Mailversand?

Gruß Zero

Content-ID: 187099

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

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

danielfr
danielfr 26.06.2012 um 16:37:38 Uhr
Goto Top
Hi, ich benutze dazu blat, wenn es um Batch geht...
ColdZero89
ColdZero89 26.06.2012 um 16:41:38 Uhr
Goto Top
Moin,

Zitat von @danielfr:
Hi, ich benutze dazu blat, wenn es um Batch geht...

is das nen Extra Tool? Würde das gerne ohne Externe Programme o.ä. machen, nur mit Boardmitteln.

Aber danke für die Antwort, angucken werd ichs mir mal genauer. Man weiß ja nie wann man es gebrauchen kann.

Gruß Zero
bastla
bastla 26.06.2012 um 19:28:28 Uhr
Goto Top
Hallo ColdZero89!

Batch hat keine derartige Möglichkeit - aber mit den Suchbegriffen "Mailversand vbs" solltest Du passende Alternativen finden ...

Grüße
bastla

P.S.: Heißt das in Hamburg mittlerweile tatsächlich schon "an Board gehen"? face-wink
ColdZero89
ColdZero89 26.06.2012 um 22:55:08 Uhr
Goto Top
Moinsen,

Danke - manchmal is mein Hirn irgendwo, aber nicht da wo es sein soll - ich hät auc hselbst drauf kommen können face-big-smile

Grüße aus dem verregnetem Hamburg
Coldi

P.S.: Nein noch nicht, heute abend hatten wir sogar KURZ sonne face-big-smile
Pseudoname
Pseudoname 27.06.2012 um 12:20:58 Uhr
Goto Top
Schau mal auf dieser Seite - da werden VBS-Lösungen beschrieben:

http://www.paulsadowski.com/wsh/cdo.htm

Folgende Einstellungen hatte ich für ein Absenderpostfach bei GMX:


'Hier befinden sich alle Email-Einstellungen
'-------------------------------------------

Set objMessage = CreateObject("CDO.Message")

objMessage.Subject = "Betreffzeile"

objMessage.From = "absender@gmx.de"

'Falls E-Mail mit Anhang, dann diese Zeile dazu
'----------------------------------------------

objMessage.AddAttachment "C:\anhang.pdf"


objMessage.To = "empfänger@domain.tld"

objMessage.TextBody = "Dies ist der Nachrichteninhalt!"

'Hier befinden sich sämtliche SMTP-Einstellungen
'-----------------------------------------------

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name oder IP des SMTP Servers
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.gmx.net"

'Authentifikationstyp, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

'Absenderbenutzername
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "absender@gmx.de"

'Absenderpasswort
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Passwort"

'Server Port
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

'Benutze SSL für die Verbindung (False or True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

'Verbindungs-Timeout zwischen SMTP-Server und CDO in Sekunden
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

objMessage.Configuration.Fields.Update

'Nachricht wird gesendet
'-----------------------

objMessage.Send

msgbox "Versand war erfolgreich!"


Gruß
ColdZero89
ColdZero89 27.06.2012 um 16:51:06 Uhr
Goto Top
Pseudoname du bist Göttlich! face-big-smile

Ich habe gerade GENAU das Problem das er rumheult wegen SMTP!
Nun seh ich deine Lösung und da steht das mit SLL und co drin face-smile

Gleich mal ausprobieren nud testen!
ColdZero89
ColdZero89 27.06.2012 aktualisiert um 21:35:00 Uhr
Goto Top
Moinsen

So der Mailversand allgemein funktioniert EINWANDFREI. Danke nochmal.

Nun will ich ein Anhang mit dranpfeifen. An sich kein Problem, wäre da nur nicht die Variablen Dateinamen, die sich täglich ändern! face-big-smile Ich Scheitere gerade dermaßen....

Hier mein Script
@echo off & setlocal

rem Batch-Skript zur Verarbeitung von PV-Datein 
rem Erstellung eines VBScriptes um Zeilenumbrüche in die PVU2 Datei einzufügen 
rem v2.5 Kevin Lange 27.06.12 (Hilfe durch Administrator.de User: bastla)

rem Deklarierung
set "Ein=PFAD\Test\PVU2.csv"  
set "Aus=PFAD\Test\PVU2_new.csv"  
set "mydate=%date:~-4%%date:~-7,2%%date:~-10,2%"  
set "PVU1=PFAD\Test\Mail\&mydate&_PVU1.csv"  

rem PVU2 Datei umbenennen
move .\Minutenmittelwerte*PVU2*.csv "%Ein%"  

rem ====================================================================
rem Erstellung des VBS
set "R=%temp%\Zeilenumbruch.vbs"  
>"%R%" echo Set   
>>fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Ein%").ReadAll  
>>"%R%" echo Set rE=New RegExp:rE.Global=True:rE.Pattern="([0-3]\d.[0-1]\d.2[0-9]\d\d [0-2]\d:[0-5]\d:00)"  
>>"%R%" echo fso.CreateTextFile("%Aus%").Write rE.Replace(T,vbNewLine ^&   
>>"$1")  

rem Ausführen des VBS
cscript //nologo "%R%" 

rem ====================================================================
rem Datein in Zielordner verschieben
move "%Aus%" .\Mail\%mydate%_PVU2.csv  
move .\Minutenmittelwerte*PVU1*.csv .\Mail\%mydate%_PVU1.csv move .\Minutenmittelwerte*Allg*.csv .\Mail\%mydate%_Allg.csv

rem PVU2 Datei löschen
del "%Ein%"  

rem ====================================================================
rem Erstellung des VBS zum Mailversand

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") = "IRGENDWAS@gmx.de"  
>>"%M%" echo   .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "PW"  
>>"%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 = "E-Mail@E-mail.com"  
>>"%M%" echo   .From = "mail.hickhack@gmx.de"  
>>"%M%" echo   .Subject = "Mail-Test vom : 27.06.12"  
>>"%M%" echo   .TextBody = "Dies ist eine automatisch generierte Mail als Test"  
>>"%M%" echo   .AddAttachment "%PVU1%"  
>>"%M%" echo   .Send  
>>"%M%" echo End With  

cscript //nologo "%M%" 

pause

Pause ist nur drinne, damit ich die Fehlermeldung sehe.

Scheitern tu ich bei
>>"%M%" echo   .AddAttachment "%PVU1%"  

Zuerst hatte ich den Absoluten Pfad drinne, nur wie ich da die Variable "mydate" unterbringe, war mir mehr Rätsel als dieses in Batch hinzubekommen.

Nun habe ich mir gedacht: Alles klar, deklarierste vor in Batch und setz die einfach in VBS ein - KEIN PROBLEM - haha sagte das Script zu mir ._.

Wo liegt mein Fehler beim Aufrufen der Variablen?! Ich bin gleich soweit anzufangen wie Biber... mir sämtliche Flüche auf verschiedenen Sprachen rauszusuchen, damit mich meine Kollegen nicht verstehen.

Gruß Zero
bastla
bastla 27.06.2012 um 17:25:42 Uhr
Goto Top
Hallo ColdZero89!

Aber, aber ... face-wink

Zeile 11 "findet ja noch in Batch statt" und sollte daher besser so aussehen:
set "PVU1=PFAD\Test\Mail\%mydate%_PVU1.csv"
Grüße
bastla
ColdZero89
ColdZero89 27.06.2012 aktualisiert um 17:45:58 Uhr
Goto Top
Moinsen,

wenns das nun war, weil ich rumprobiert hab und die Variable im endeffekt RICHTIG aufgerufen ist aber die DEKLARIERUNG fürn a... is weil da nochn tippfehler drin war - dann ess ich heute abend Pizza! face-big-smile fix ma testen.

Gruß Zero

P.S.: So fehlermeldung: FEHLANZEIGE face-big-smile Danke bastla!

Problem 2: Nun hat er scheinbar schwierigkeiten zu senden Oo der brauch ewig....... vorher ging das Zack kalack und da war die Mail... ich verzweifle gleich echt x)

P.S.2: Nun probiere ich die anderen beiden Files auch mit dranzuhängen.

Eine möglichkeit wäre sicherlich pro Anhang eine Zeile mit
>>"%M%" echo   .AddAttachment "%PVU1%"  
zu machen, wie bekomm ich das aber in eine Zeile? die anderen Variablen heißen PVU2 und Allg

Habe schon Probiert mit
>>"%M%" echo   .AddAttachment "%PVU1%%PVU2%%Allg%"  
>>"%M%" echo   .AddAttachment "%PVU1%""%PVU2%""%Allg%"  
>>"%M%" echo   .AddAttachment "%PVU1%&&%PVU2%&&%Allg%"  
>>"%M%" echo   .AddAttachment "%PVU1%"&&"%PVU2%"&&"%Allg%"  
Bei letzter Variante öffnet er mir dann PVU2 und Allg - lol -

Danke im Vorraus.

P.S.3: So mit Variante
>>"%M%" echo   .AddAttachment "%PVU1&&PVU2&&Allg%"  
schickt er zwar wieder die E-Mail, auch ein Anhang ist da, aber das is ne *.BIN-Datei... und das sind nicht meine Anhänge... ARGH!

P.S.4: Ich mach nun Feierabend - Mir brennt das Hirn, ich brauch ne Zigarette und zu Hause wartet eine Pizza auf mich.
bastla
bastla 27.06.2012 um 18:20:53 Uhr
Goto Top
Hallo ColdZero89!

Versuch doch einfach
>>"%M%" echo   .AddAttachment "%PVU1%"  
>>"%M%" echo   .AddAttachment "%PVU2%"  
>>"%M%" echo   .AddAttachment "%Allg%"  
Grüße
bastla
ColdZero89
ColdZero89 27.06.2012, aktualisiert am 28.06.2012 um 09:11:59 Uhr
Goto Top
Nabend bastla,

nen Bier und ne Pizza danach traue ich mich tatsächlich noch an dieses Script - omg.

Das habe ich auch Probiert, kam mir so kurz vor PC aus in den Sinn. Funktioniert auch nicht, da schickt er NICHTS. Ohne die Attachments macht er alles reibungslos binnen Sekunden.

Die Datein (.csv) sind relativ "groß" zusammen ca 5-7MB (Wenn ich mich im Kopf net grad verrechne) Kann es daran liegen? Wobei ich bezweifle dass das Script wirklich 2 Minuten+ brauch....

p.s.:
Guten Morgen,

Dateien sind im Schnitt 8-11MB gesamt Groß. Werde das mal mit ner "kleinen" Datei zuerst testen, ich denke - theoretisch - wirds daran liegen das der so lange brauch.

Gruß Zero
ColdZero89
ColdZero89 28.06.2012 um 10:26:45 Uhr
Goto Top
Moinsen face-smile

Feuer gelöscht! Es lag daran das die Dateien zu groß sind. Für insgesamt 11MB hat der nun knapp 5 Minuten gebraucht.

Hier das Script
@echo off & setlocal

rem 1.0 Batch-Skript zur Verarbeitung von PV-Datein aus Saarbrücken 
rem 2.0 Erstellung eines VBScriptes um Zeilenumbrüche in die PVU2 Datei einzufügen 
rem 2.5 Dateien per VB als Mail versenden 
rem 3.0 Dateien per VB als Mail versenden mit eigenständiger Eingabe der E-Mailadresse 
rem v2.5 Kevin Lange 27.06.12 (Hilfe durch Administrator.de User: bastla)

rem Deklarierung
set "Ein=C:\XYZ\Test\PVU2.csv"  
set "Aus=C:\XYZ\Test\PVU2_new.csv"  
set "mydate=%date:~-4%%date:~-7,2%%date:~-10,2%"  
set "PVU1=C:\XYZ\Test\Mail\%mydate%_PVU1.csv"  
set "PVU2=C:\XYZ\Test\Mail\%mydate%_PVU2.csv"  
set "Allg=C:\XYZ\Test\Mail\%mydate%_Allg.csv"  

rem PVU2 Datei umbenennen
move .\Minutenmittelwerte*PVU2*.csv "%Ein%"  

rem ====================================================================
rem Erstellung des VBS
set "R=%temp%\Zeilenumbruch.vbs"  
>"%R%" echo Set   
>fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Ein  
>%").ReadAll  
>>"%R%" echo Set rE=New RegExp:rE.Global=True:rE.Pattern="([0-3]\d.[0-1]\d.2[0-9]\d\d [0-2]\d:[0-5]\d:00)"  
>>"%R%" echo fso.CreateTextFile("%Aus%").Write rE.Replace(T,vbNewLine ^&   
>>"$1")  

rem Ausführen des VBS
cscript //nologo "%R%" 

rem ====================================================================
rem Datein in Zielordner verschieben
move "%Aus%" .\Mail\%mydate%_PVU2.csv  
move .\Minutenmittelwerte*PVU1*.csv .\Mail\%mydate%_PVU1.csv move .\Minutenmittelwerte*Allg*.csv .\Mail\%mydate%_Allg.csv

rem PVU2 Datei löschen
del "%Ein%"  

rem ====================================================================
rem Erstellung des VBS zum Mailversand
rem Für Anhänge: .AddAttachment "PFAD"  

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") = "MAILADRESSE"  
>>"%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@Mail.com"  
>>"%M%" echo   .From = "Hans@mail.de"  
>>"%M%" echo   .Subject = "Mail-Test vom : 27.06.12"  
>>"%M%" echo   .TextBody = "Dies ist eine automatisch generierte Mail als Test"  
>>"%M%" echo   .AddAttachment "%Allg%"  
>>"%M%" echo   .AddAttachment "%PVU1%"  
>>"%M%" echo   .AddAttachment "%PVU2%"  
>>"%M%" echo   .Send  
>>"%M%" echo End With  

cscript //nologo "%M%" 

Danke
Gruß Zero
bastla
bastla 28.06.2012 um 14:50:16 Uhr
Goto Top
Hallo ColdZero89!
Es lag daran das die Dateien zu groß sind.
Da würde sich ja noch eine Erweiterung aufdrängen face-wink - als Anhaltspunkt zB dieser Beitrag ...

Grüße
bastla
Pseudoname
Pseudoname 04.07.2012 um 16:10:14 Uhr
Goto Top
Feuer gelöscht! Es lag daran das die Dateien zu groß sind. Für insgesamt 11MB hat der nun knapp 5 Minuten
gebraucht.

Ich hatte in meinem Script ebenfalls eine ZIP-Funktion eingebaut. Vorteil: Es funktioniert mit Windows-Boardmitteln.

Hier der VB-Code:

'*****************************************************************************************  
'Hier wird die Datei mit ZIP komprimiert - um die Uploadzeit beim Mailversand zu verkürzen  
'*****************************************************************************************  

Dim Quelle
Dim Ziel
Quelle = "C:\Ordner\liste.csv"  
Ziel = "C:\Order\liste.zip"  

'write zip file header  
Set fso = createobject("Scripting.FileSystemObject")  
Set file = fso.OpenTextFile(Ziel, 2, True)
file.write "PK" & chr(5) & chr(6) & string(18,chr(0))  
file.close

on error resume next

Set shl = createobject("Shell.Application")  

shl.namespace(Ziel).copyhere Quelle

Do Until shl.Namespace(Ziel).Items.Count = 1
wscript.sleep 100
Loop


on error goto 0

Gruß
Pseudoname
bastla
bastla 04.07.2012 um 16:22:18 Uhr
Goto Top
@Pseudoname
Vorteil: Es funktioniert mit Windows-Boardmitteln.
Vorteil gegenüber?

Grüße
bastla
ColdZero89
ColdZero89 06.07.2012 um 15:07:59 Uhr
Goto Top
Moin,

Zip ist an sich eine gute Idee, die Wartezeit ist hier aber so unerheblich, das Nebenher normal weitergearbeitet werden kann.

Dennoch danke für die Idee face-smile

Gruß Zero