unwissender1
Goto Top

Geburtstags-Mails an alle Mitarbeiter versenden

Hallo,

wir wollten gerne in der Firma über aktuelle Geburtstage per E-Mail informiert werden.

Da es im Netz m.E. nichts so richtig brauchbares und kostenloses gab, hab ich einen kleinen Batch geschrieben. Dieser versendet am Geburtstag allen Mitarbeitern eine E-Mail als kleine Erinnerung. Zum Versenden wird das kostenlose Programm Blat verwendet (nur 3 Dateien, ohne Installation).

Der Batch sollte über die Aufgabenplanung / geplante Tasks täglich immer nachts nach 0 Uhr ausgeführt werden, so dass die Kollegen die E-Mail morgens im Postfach haben.

Hier der Code zur freien Verwendung für Jeden:

:: =================================================================================
:: Versendet Geburtstags-Mails an Mitarbeiter
::
:: Neue Mitarbeiter müssen an 3 (!) Stellen eingefügt werden.
:: =================================================================================

:: (1) Hier Namen und Geburtstag definieren (Format einhalten!)
set Max_Mustermann=02.03.
set Mäxle_Musterfrau=15.05.

:: Variablen für Datum definieren
set Tag=%date:~0,2%
set Monat=%date:~3,2%
set heute=%Tag%.%Monat%.

:: (2) Mitarbeiter in Textdatei schreiben, wenn er Geburtstag hat
if %Max_Mustermann%==%heute% echo Max Mustermann (Vertriebsleiter) hat am %Max_Mustermann% Geburtstag. >> Geburtstage.txt
if %Mäxle_Musterfrau%==%heute% echo Mäxle Musterfrau (Verwaltung) hat am %Max_Musterfrau% Geburtstag. >> Geburtstage.txt

:: Wartezeit
ping localhost

if exist "Geburtstage.txt" goto :Senden  

:Ende_ohne_Senden
exit

:Senden (3)
cd /d "C:\Geburtstagsmail\Blat"  
Blat -install 192.168.xxx.xxx absender@domain.de
Blat "C:\Geburtstagsmail\Geburtstage.txt" ^  
-to empfänger1@domain.de,empfänger2@domain.de  ^
-server 192.168.xxx.xxx -u benutzername -pw passwort ^
-debug -timestamp -log "C:\Geburtstagsmail\Logdatei.txt" ^  
-subject "Heutige Geburtstage"  

:Löschen
del C:\Geburtstagsmail\Geburtstage.txt

:Ende_nach_Senden
exit

Für Anregungen und Kritik bin ich gerne bereit. Beispielsweise eine zusätzliche E-Mail 3 Tage vor dem Geburtstag zu versenden.

Grüße
Thomas

Content-ID: 202663

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

Ausgedruckt am: 08.11.2024 um 17:11 Uhr

bastla
bastla 02.03.2013 um 22:24:45 Uhr
Goto Top
Hallo Unwissender1!

Da Du als %heute% ja ohnehin Tag und Monat benötigst, kannst Du auch gleich
set "heute=%date:~,6%"
verwenden.
Neue Mitarbeiter müssen an 3 (!) Stellen eingefügt werden.
ist nicht sehr elegant - wenn Du als Alternative eine Textdatei "Mitarbeiterliste.txt" nach dem Muster
02.03.;Max Mustermann;Vertriebsleiter
15.05.;Mäxle Musterfrau;Verwaltung
erstellst, kannst Du die Datei Geburtstage.txt etwa so erzeugen:
for /f "tokens=1-3 delims=;" %%a in ('findstr "%heute%;" "C:\Geburtstagsmail\Mitarbeiterliste.txt"') do >>C:\Geburtstagsmail\Geburtstage.txt echo %%b (%%c) hat am %%a Geburtstag.
Um die zusätzliche E-Mail 3 Tage vor dem Geburtstag versenden zu können, müsste das Datum von "heute in 3 Tagen" ermittelt werden, was in native Batch zwar möglich, aber mühsam (Monats- / Jahreswechsel, Schaltjahr berücksichtigen) ist - einfacher geht's mit einem kleinen VBScript ("Datumsermittlung.vbs") der Art
WScript.Echo DateAdd("d",3,Date)
- lässt sich auch leicht aus dem Batch heraus erzeugen mit
>"%temp%\Datumsermittlung.vbs" echo WScript.Echo DateAdd("d",3,Date)
- und dem Aufruf
for /f %%i in ('cscript //nologo "%temp%\Datumsermittlung.vbs"') do set "Datum=%%i"
Der Rest dann wie für %heute% ...

Grüße
bastla
Unwissender1
Unwissender1 03.03.2013 aktualisiert um 13:12:08 Uhr
Goto Top
Hallo bastla,

zwar hat mich die nicht sehr elegante Ausführung auch etwas gestört, jedoch wusste ich es einfach nicht besser. Die von Dir aufgezeigte Lösung finde ich sehr elegant, zumal die Pflege der Mitarbeiterliste nun fast jeder im Unternehmen machen kann.

Auch die Umsetzung mit der E-Mail 3 Tage vor dem Geburtstag hat einwandfrei geklappt.

Herzlichen Dank für Deine Mühe!

Grüße
Thomas
wiesi200
wiesi200 03.03.2013 um 17:37:04 Uhr
Goto Top
Hallo,

alternativ könnte man sich Gedanken machen ob man das Activ Directory abfragt.

Ich persönlich greife die Lohnbuchhaltung ab da dort die Daten auch schon drinnen sind und schicke sie aber nur der Geschäftsleitung. Man sollte mit den Mitarbeitern auch klären ob ihnen das recht ist. Könnte ja sein das einer seinen Geburtstag nicht verraten will.
Unwissender1
Unwissender1 03.03.2013 um 19:09:50 Uhr
Goto Top
Hi,

da wir bisher noch kein AD einsetzen, entfällt diese Variante.
Die Lohnbuchhaltung setzt bei uns extern, daher kommt ich da so nicht ran.

Danke für den Hinweis bzgl. dem Persönlichkeitsrecht. Da wir jedoch eine recht kleine Firma sind, stellt dies m.E. kein Problem dar. Ich werde aber trotzdem kurz Rücksprache mit den Kollegen halten.

Gruß
Thomas
wiesi200
wiesi200 03.03.2013 um 20:49:23 Uhr
Goto Top
Naja, ich wuerd sogar bei 5 Usern ein AD verwenden.
Sylvia
Sylvia 11.03.2013 um 13:41:35 Uhr
Goto Top
Hallo,

ich möcht hier nur das Thema Datenschutz ansprechen - vorsicht beim Verteilen von Geburtstagen an alle Mitarbeiter, das kann Ärger geben. Es muss die Zustimmung derer eingeholt werden, deren Geburtstag verteilt wird...
Habe da schon einschlägige Erfahrungen gemacht...

Einfach nur als Info face-smile

Liebe Grüße
Sylvia
Unwissender1
Unwissender1 11.03.2013 aktualisiert um 17:39:37 Uhr
Goto Top
Hallo Sylvia,

danke auch nochmal an Dich für den Hinweis. Hatte zwischenzeitlich eine Info an alle Mitarbeiter geschrieben, dass die Geburtstage (ohne Geburtsjahr!) künftig alle versendet werden. Wer damit nicht einverstanden ist, wird vom Verteiler entfernt. Bisher hat sich noch niemand entfernen lassen.

Man muss dazu sagen, dass wir eine wirklich kleine Firma mit nur rund 10-15 Mitarbeitern sind und die Gepflogenheiten recht locker sind. Da sieht man diese Infomail es eher als Hilfe, statt als Diskriminierung o.ä. an.

Gruß
Thomas
pblacky
pblacky 11.07.2021 aktualisiert um 12:07:48 Uhr
Goto Top
Hallo Bastla,
Ich habe gerade für eine Aufgabe dieses Skript gefunden und konnte mein Problem damit zu 99% lösen, DANKE für deine tolle Arbeit hier!!

Zitat von @bastla:
for /f %%i in ('cscript //nologo "%temp%\Datumsermittlung.vbs"') do set "Datum=%%i"

So wie es gepostet ist zeigt dein Skript für heute 11.07.2021 an.
Ich würde gerne das Datum aus diesem Skript OHNE das Jahr haben, also 11.07. so wie es auch aus %heute% kommt.
Geht das?
Damit könnte man aus dem Textfile die Geburtstage für heute und für morgen in die Geburtstagsliste schreiben.....

Was ich auch geil finden würde, wenn man das Jahr in die Textliste DAZUSCHREIBT und dann daraus das Alter berechnet.
z.B. Max Musterfrau (39 Jahre)
Werde mal darüber nachdenken on das überhaupt möglich ist?
Vielleicht hast ja einen Tipp face-wink