rh-1958
Goto Top

Batch-Skript mit E-Mail Funktion ergänzen

Hallo,

ich habe mir mit Batch-Schnipseln das folgende Batch-Skript "zusammengebastelt". Das Skript erzeugt einen Ordner (Name +Tagesdatum) für die Datensicherung mit nachfolgender Löschung des vor 3 Tagen erzeugten Sicherungsordners.
@echo off
:: Tunderbird beenden
set "programmName=Thunderbird.exe"  
taskkill /IM %programmName% /F

setlocal enabledelayedexpansion

:: Aktuelles Datum im Format JJJJ-MM-TT basierend auf den regionalen Einstellungen
set "datum=%date:~6,4%-%date:~3,2%-%date:~0,2%"  

:: HauptOrdner mit heutigem Datum erstellen
set "HauptOrdner=C:\Ablage\# Ablage Thunderbird\Backup %datum%"  
if not exist "%HauptOrdner%" mkdir "%HauptOrdner%"  

:: ZielOrdner erstellen
set "ZielOrdner=C:\Ablage\# Ablage Thunderbird\Backup %datum%\Thunderbird"  
if not exist "%ZielOrdner%" mkdir "%ZielOrdner%"  

:: Quellverzeichnis angeben
set "QuellVerzeichnis=C:\Users\MasterBlaster\AppData\Roaming\Thunderbird"  

:: Dateien kopieren
xcopy "%QuellVerzeichnis%\*" "%ZielOrdner%\" /E /I /H /Y  
                                                                                    
:: Lösche Version von vor 3 Tagen

:: Pfad zum übergeordneten Verzeichnis, in dem sich die Ordner befinden
set "BasisPfad=C:\Ablage\# Ablage Thunderbird"  

:: Datum vor 3 Tagen berechnen (im Format TT-MM-JJJJ)
for /f %%A in ('powershell -NoProfile -Command "(Get-Date).AddDays(-3).ToString('yyyy-MM-dd')"') do set "ZielDatum=%%A"  

:: Ordnerpfad, der gelöscht werden soll
set "LoeschOrdner=%BasisPfad%\Backup %ZielDatum%"  

:: Überprüfen, ob der Ordner existiert, und dann löschen
if exist "%LoeschOrdner%" (  
    rmdir /s /q "%LoeschOrdner%"  
    echo Der Ordner "%LoeschOrdner%" wurde geloescht.  
) else (
    echo Der Ordner "%LoeschOrdner%" wurde nicht gefunden.  
)

pause


Das Skript möchte ich nun gerne dahingehend ergänzen, dass mit der Ausführung abschließend eine Mail mit folgenden Angaben im Nachrichtentext (vorzugsweise) oder in einem angehängten LogFile an mich gesendet wird:

Mail-Betreff: Sicherungsdatum: yyyy:mm:dd
------------------------------------------------------------------
Mailtext (oder LogFile) : Sicherungsdatum: yyyy:mm:dd
Erstellter Ordner: „C:\Ablage ……..“
Anzahl der kopierten Dateien (alle Ordner !):
Gelöschter Ordner: „C:\Ablage……..“
(oder: Der zu löschende Ordner „C:\ Ablage……“ konnte nicht gefunden werden)

Leider taugen meine eher bescheidenen Kenntnisse zur Thematik nicht dieses Problem alleine zu lösen. Und nach stundenlangem ergebnislosem „Trial and Error“ würde ich mich sehr über entsprechende Hilfestellungen von euch freuen.

Gruß R. H.

Content-ID: 672477

Url: https://administrator.de/forum/batch-skript-mit-e-mail-funktion-ergaenzen-672477.html

Ausgedruckt am: 15.04.2025 um 19:04 Uhr

mirdochegal
Lösung mirdochegal 14.04.2025 aktualisiert um 13:16:34 Uhr
Goto Top
Moin,

@echo off
set "to=empfänger@example.com"  
set "subject=Testmail"  
set "body=Hallo! Dies ist eine Testmail über Batch."  
set "smtpServer=smtp.example.com"  
set "from=deine@email.de"  
set "username=deinbenutzername"  
set "password=deinpasswort"  

powershell -Command ^
Send-MailMessage -From '%from%' -To '%to%' -Subject '%subject%' -Body '%body%' -SmtpServer '%smtpServer%' -Credential (New-Object System.Management.Automation.PSCredential('%username%', (ConvertTo-SecureString '%password%' -AsPlainText -Force))) -UseSsl  

Passwort liegt dann aber im Klartext vor. Davon muss man abraten.

learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-7.5
The Send-MailMessage cmdlet is obsolete. This cmdlet doesn't guarantee secure connections to SMTP servers. While there is no immediate replacement available in PowerShell, we recommend you do not use Send-MailMessage  

Gruß
DivideByZero
DivideByZero 14.04.2025 aktualisiert um 13:43:18 Uhr
Goto Top
Moin,

ansonsten für die Kommandozeile: CMail. Sofern Du über Oauth sendest, ist auch das Passwort-Problem gelöst, das ansonsten halt immer bleibt.

CMail kann eine simple Passwortverschlüsselung durchführen, wobei das Passwort dann an den Windowshost gebunden werden kann. Nicht perfekt, besser als nichts:

Password encryption

This option is available in CMail 0.8.0 or later.

Running CMail with the -encryptpass option will generate an encrypted password which can be used in place of the plain text password in the -host setting. The password is protected using a static key by default, and can be bound to a specific Windows install using the -bindpass option. Encrypted passwords provide protection against casual observation only.


Gruß

DivideByZero

P.S.: Nur so als Anregung: Du solltest Dein Backup-Konzept überdenken. Sichern auf dasselbe Laufwerk ist ebenso wenig sinnvoll, wie ein Überschreiben schon nach 3 Tagen. Wenn Du Dir etwas auf dem PC einfängst, ist direkt alles weg, und wenn Du dich gegen versehentliches Löschen absichern willst: da helfen 3 Tage in die Vergangenheit meist nicht, weil man es später bemerkt. Daher, statt selbst zu bauen, schau z.B. mal bei Duplicati vorbei, oder Veeam Agent für Windows etc.
RH-1958
RH-1958 14.04.2025 um 17:15:57 Uhr
Goto Top
Hi DivideByZero,

Danke für deine Hinweise.
Du hast natürlich Recht, was "dieses" Sicherungskonzept angeht. Das Skript und die Struktur sind lediglich als Übungsplattform angelegt. Meine tatsächlichen Datensicherungen erfolgen selbstverständlich (täglich / wöchentlich / monatlich) auf externen Speichermedien in unterschiedlichem Umfang. Ich benutze dafür FreeFileSync... und den Windows Taskplaner. Bei Gelegenheit werde ich mir aber auch mal die von dir vorgeschlagenen Alternativen anschauen.

Das Batch-Projekt steht schon seit einiger Zeit auf meiner ToDo-Liste. Wollte schon lange mal ausprobieren was man mit einfachen Bordmitteln selber zusammenstricken kann. Die Backup-Aufgabe schien mir dabei ein guter Einstieg zu sein .....

Gruß R. H.
RH-1958
RH-1958 14.04.2025 um 17:30:36 Uhr
Goto Top
Hi mirdochegal,

danke für dein Batch-Skript. Ich werde gleich morgen mal testen und berichten ob es funktioniert hat.

Gruß R. H.
DivideByZero
DivideByZero 14.04.2025 um 17:35:47 Uhr
Goto Top
Na dann, mal los. Wenn es Batch sein soll, wäre wohl cmail.exe sinnvoll; wenn Du lernen willst, dann solltest Du Dir direkt die Powershell anschauen (und da ggf. mailkit nutzen).
RH-1958
RH-1958 15.04.2025 um 12:40:07 Uhr
Goto Top
Hallo mirdochegal,

Dein Skript hat leider, auch mit anderen E-Mail Konten, nicht funktioniert.

screenshot 2025-04-15 123453

Gruß R. H.
mirdochegal
mirdochegal 15.04.2025 aktualisiert um 13:15:45 Uhr
Goto Top
Dein Skript hat leider, auch mit anderen E-Mail Konten, nicht funktioniert.
Das stimmt nicht. Der Code funktioniert. Schau Dir mal die Fehlermeldung genau an - Irgendeine IP ist geblacklistet ...

Gruß
RH-1958
RH-1958 15.04.2025 um 14:06:35 Uhr
Goto Top
Danke für den Hinweis. Die Suche nach einer "geblacklisteten IP" übersteigt aber eindeutig meine Fähigkeiten...

Gruß R. H.
BiberMan
Lösung BiberMan 15.04.2025 aktualisiert um 14:44:24 Uhr
Goto Top
Zitat von @RH-1958:

Danke für den Hinweis. Die Suche nach einer "geblacklisteten IP" übersteigt aber eindeutig meine Fähigkeiten...

Gruß R. H.
https://mxtoolbox.com/SuperTool.aspx?action=blacklist%3a80.187.112.240&a ...

Deine IP steht in 3 Blacklists ...

Der Hauptgrund für die Meldung ist aber auch, das @mirdochegal im Code die Portangabe vergessen hat ....auf dem Default Port 25 wird dir keiner der Mailserver mit einer dynamischen IP Mails einliefern lassen.
Also als erstes mal den Router ne neue IP ziehen lassen und auf den STARTSSL Port switchen mittels Parameter -Port 587, ... Providerangaben nachschlagen wenn Port 587 nicht belegt ist.
Und zur Info, Send-Mailmessage kann ausschließlich STARTTLS, kein Plain SSL auf Port 465.
DivideByZero
DivideByZero 15.04.2025 um 17:03:17 Uhr
Goto Top
Ich weiß, ich wiederhole mich, aber schau Dir bei Deinen Kenntnissen das gut dokumentierte CMail an und nutze dann die Zugangsdaten und den Mailserver von Deinem Provider (Deiner Mailadresse), damit das Problem des Blacklistings entfällt.