⏱️ Löschen Tool – Countdown-Timer & automatisierter E-Mail-Versand

Zwei Python-Desktop-Tools: Ein hochgradig konfigurierbarer Countdown-Timer und ein SMTP-Mailer mit CSV-Empfängerliste

PythonTkinterSMTPpandasCSV

🚀 Automatisierte Kommunikation für Ihr Business?

Vereinbaren Sie ein unverbindliches Strategiegespräch

📞 02406 803 7603 ✉️ info@computerkumpel.de

📊 Business Value

Zwei pragmatische Python-Tools zur Prozessunterstützung: Ein flexibler Countdown-Timer mit individuell konfigurierbaren Zeilen und ein SMTP-Mailer für massenhaften, personalisierten E-Mail-Versand.

Countdown-Timer
Fullscreen-Timer mit konfigurierbaren Zeiteinheiten pro Zeile. Ideal für Events, Deadlines oder Präsentationen.
📧
E-Mail-Versand
SMTP-Versand via Microsoft 365 mit CSV-Empfängerliste und personalisierten EML-Templates mit Platzhalter-Ersetzung.
⚙️
JSON-Konfiguration
Alle Einstellungen (Datum, Farben, Zeilen-Layout, Versand-Rate) persistent in config.json speicherbar.

💻 Countdown-Timer – Detailansicht

Der Timer zerlegt die verbleibende Zeit in individuell konfigurierbare Zeilen mit flexiblen Einheiten-Kombinationen.

📋
Mehrzeilig
Mehrere Zeilen mit unterschiedlichen Einheiten-Kombinationen – z.B. Zeile 1: Monate/Wochen/Tage, Zeile 2: Stunden/Minuten/Sekunden.
🎨
Visuell anpassbar
Hintergrundfarbe, Schriftfarbe und Font (Ubuntu) frei wählbar via ColorPicker.
📅
DatePicker
Integrierter Kalender (tkcalendar) zur einfachen Auswahl des Zieldatums mit Uhrzeiteingabe.

📝 Echte Code-Snippets

Der Countdown-Timer mit flexiblem Einheiten-System:

remaining_time = target_time - now
total_seconds = remaining_time.total_seconds()

def format_unit(value, singular, plural):
    return f"{int(value)} {singular if value == 1 else plural}"

for line_units in config["lines"]:
    remaining_seconds = total_seconds
    if "Monate" in line_units:
        months = remaining_seconds // (30 * 24 * 3600)
        line_content.append(format_unit(months, "Monat", "Monate"))
    if "Tage" in line_units:
        days = remaining_seconds // (24 * 3600)
        line_content.append(format_unit(days, "Tag", "Tage"))
    if "Stunden" in line_units:
        hours = remaining_seconds // 3600
        line_content.append(format_unit(hours, "Stunde", "Stunden"))

SMTP-E-Mail-Versand mit personalisierten Templates:

with smtplib.SMTP('smtp.office365.com', 587) as server:
    server.starttls()
    server.login(email, password)

    for index, row in self.csv_data.iterrows():
        body = self.create_email_body(row)
        msg = MIMEMultipart()
        msg['From'] = email
        msg['To'] = row['Email']
        msg.attach(MIMEText(body, 'plain'))
        server.send_message(msg)
        time.sleep(60 / rate)  # Rate-Limiting

Platzhalter-Ersetzung in EML-Vorlagen:

def create_email_body(self, row):
    email_template = self.eml_template
    for key, value in row.items():
        email_template = email_template.replace(f'{{{{ {key} }}}}', str(value))
    return email_template

🔧 Technologie-Stack

Python 3 Tkinter tkcalendar smtplib pandas email.mime JSON datetime

🚀 Kernfunktionen