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-Key: 187099

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

Printed on: April 26, 2024 at 08:04 o'clock

Member: danielfr
danielfr Jun 26, 2012 at 14:37:38 (UTC)
Goto Top
Hi, ich benutze dazu blat, wenn es um Batch geht...
Member: ColdZero89
ColdZero89 Jun 26, 2012 at 14:41:38 (UTC)
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
Member: bastla
bastla Jun 26, 2012 at 17:28:28 (UTC)
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
Member: ColdZero89
ColdZero89 Jun 26, 2012 at 20:55:08 (UTC)
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
Member: Pseudoname
Pseudoname Jun 27, 2012 at 10:20:58 (UTC)
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ß
Member: ColdZero89
ColdZero89 Jun 27, 2012 at 14:51:06 (UTC)
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!
Member: ColdZero89
ColdZero89 Jun 27, 2012 updated at 19:35:00 (UTC)
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
Member: bastla
bastla Jun 27, 2012 at 15:25:42 (UTC)
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
Member: ColdZero89
ColdZero89 Jun 27, 2012 updated at 15:45:58 (UTC)
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.
Member: bastla
bastla Jun 27, 2012 at 16:20:53 (UTC)
Goto Top
Hallo ColdZero89!

Versuch doch einfach
>>"%M%" echo   .AddAttachment "%PVU1%"  
>>"%M%" echo   .AddAttachment "%PVU2%"  
>>"%M%" echo   .AddAttachment "%Allg%"  
Grüße
bastla
Member: ColdZero89
ColdZero89 Jun 27, 2012, updated at Jun 28, 2012 at 07:11:59 (UTC)
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
Member: ColdZero89
ColdZero89 Jun 28, 2012 at 08:26:45 (UTC)
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
Member: bastla
bastla Jun 28, 2012 at 12:50:16 (UTC)
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
Member: Pseudoname
Pseudoname Jul 04, 2012 at 14:10:14 (UTC)
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
Member: bastla
bastla Jul 04, 2012 at 14:22:18 (UTC)
Goto Top
@Pseudoname
Vorteil: Es funktioniert mit Windows-Boardmitteln.
Vorteil gegenüber?

Grüße
bastla
Member: ColdZero89
ColdZero89 Jul 06, 2012 at 13:07:59 (UTC)
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