Erinnerungen und Termine per Email verschicken

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Vieleicht kann noch jemand außer mir etwas mit diesem Skript anfangen... :wink:

Es handelt sich um ein sehr kleines Programm, mit dem die Ausgaben des Programms birthday per Email versendet werden können.

Birthday ist ein kleines Linux-Programm, mit dem Erinnerungen, Termine und Geburtstage auf der Konsole ausgegeben werden können. Diese Termine werden einfach in eine Textdatei geschrieben die vom Programm ausgelesen wird. --> man birthday

birthday_send_email.py schnappt sich diese Konsolenausgabe, übersetzt die Monats- und Tagesangaben ins Deutsche, entfernt unerwünschte Sonderzeichen und verschickt diese Ausgabe per Email.
Da ich wenig Termine verwalten muss, genügt mir diese Art der Terminverwaltung. Ich lasse mir per Cron-Job zwei mal am Tag eine Email mit meinen wichtigsten Terminen und Geburtstagserinnerungen zuschicken. :-)

Infos zu birthday:
http://packages.debian.org/unstable/misc/birthday
http://users.zetnet.co.uk/mortia/source/

Hier der Code zu birthday_send_email.py:

Code: Alles auswählen

<<siehe Version 0.4>>
mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 26. Juli 2004, 13:15, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Ich habe noch zwei kleine Änderungen durchgeführt:
  • - Übersetzung der Ereignisliste verbessert
    - Zu lange Linien werden jetzt abgeschnitten
Hier der Code:

Code: Alles auswählen

<<siehe Version 0.4>>
mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 26. Juli 2004, 13:16, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Die Übersetzung funktionierte nicht richtig da die Reihenfolge beim Dictionary nicht korrekt eingehalten wurde. Ich habe die Dictionaries durch Listen ersetzt -- jetzt funktioniert es besser.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
***********************************************************************
* Description:  Sendet ein Email mit den aktuellen Terminen an die
*               angegebene Emailadresse
*               (baut auf dem Programm "birthday" auf
*                --> 'man birthday')
* Version:      0.4
* Copyright:    2004 by Gerold Penz - gerold.penz(at)aon.at
* Created:      2004-07-10 by Gerold
* Modified:     2004-07-22 by Gerold
* License:      free
* Requirements: Python2.3:  http://www.python.org
*               birthday:   http://users.zetnet.co.uk/mortia/source/
***********************************************************************
"""

FROM_EMAIL = "root@gp-server.gp"
FROM_NAME = "GP-SERVER"
TO_EMAIL = "gerold@gp-server.gp"
TO_NAME = "Gerold Penz"
DAYS = 7
ROWS = 3
SUBJECT = "Termine und Ereignisse"


#----------------------------------------------------------------------
def translate_eventlist(text):
    """Uebersetzt die Ereignisliste"""

    translations = \
    [
        [" finishes today", " wird HEUTE fertig"],
        [" has a birthday", " hat Geburtstag --"],
        [" for", " Dauert"],
        [" day longer", " Tag an"],
        [" days longer", " Tage an"],
        [" tomorrow", " MORGEN"],
        [" days' time", " Tagen"],
        [" today", " HEUTE"],
        [" days", " Tage"],
        [" day", " Tag"],
        [" week's time", " Woche(n)"]
    ]

    for item in translations:
        text = text.replace(item[0], item[1])

    #Rueckgabe
    return text


#----------------------------------------------------------------------
def translate_calendar(text):
    """Uebersetzt Wochentage und Monate"""

    #Wochentage uebersetzen
    weekdays = \
    [
        ["-Monday-", "-Montag-"],
        ["-Tuesday-", "-Dienstag-"],
        ["-Wednesday-", "-Mittwoch-"],
        ["-Thursday-", "-Donnerstag-"],
        ["-Friday-", "-Freitag-"],
        ["-Saturday-", "-Samstag-"],
        ["-Sunday-", "-Sonntag-"],
    ]

    for item in weekdays:
        text = text.replace(item[0], item[1])

    #Monate uebersetzen
    months = \
    [
        ["-January-", "-Jänner-"],
        ["-February-", "-Februar-"],
        ["-March-", "-März-"],
        ["-April-", "-April-"],
        ["-May-", "-Mai-"],
        ["-June-", "-Juni-"],
        ["-July-", "-Juli-"],
        ["-August-", "-August-"],
        ["-September-", "-September-"],
        ["-October-", "-Oktober-"],
        ["-November-", "-November-"],
        ["-December-", "-Dezember-"]
    ]

    for item in months:
        text = text.replace(item[0], item[1])

    #Sonstiges uebersetzen
    translations = \
    [
        [" has a birthday", " hat Geburtstag"]
    ]

    for item in translations:
        text = text.replace(item[0], item[1])

    #Rueckgabe
    return text


#----------------------------------------------------------------------
def send_email(from_email, from_name, to_email, to_name, subject, text):
    """Sendet ein Email an die angegebene Adresse"""

    import smtplib

    server = smtplib.SMTP("localhost")

    text = \
        'From: \"%(from_name)s\" <%(from_email)s>\n' \
        'To: \"%(to_name)s\" <%(to_email)s>\n' \
        'Content-Type: text/plain;charset=\"iso-8859-1\"\n' \
        'Subject: %(subject)s\n' \
        '\n' \
        '%(text)s' % locals()

    server.sendmail(from_email, to_email, text)
    server.quit()


#----------------------------------------------------------------------
def main():

    import os

    #Ereignisse einlesen
    mailtext = "Erinnerungen:\n" + "-"*78 + "\n"
    execstring = "/usr/bin/birthday -W %d" % DAYS
    retfile = os.popen(execstring, "r")
    mailtext += translate_eventlist(retfile.read())
    retfile.close()
    mailtext += "-"*78 + "\n\n"

    #Kalenderansicht einlesen
    mailtext += "Kalender:\n" + "-"*78 + "\n"
    execstring = "/usr/bin/birthday -c -d %d -l %d" % (DAYS, ROWS)
    retfile = os.popen(execstring, "r")
    retlist = list(retfile.read())
    retfile.close()

    #Stoerende Sonderzeichen entfernen
    rettext = []
    for item in retlist:
        if item == "\x08":
            rettext.pop()
        else:
            rettext.append(item)
    mailtext += translate_calendar("".join(rettext))

    #Zu lange Linien abschneiden
    rows = []
    for item in mailtext.split("\n"):
        if item.startswith("---"):
            rows.append(item[:78])
        else:
            rows.append(item)
    mailtext = "\n".join(rows)

    #Email senden
    send_email(FROM_EMAIL, FROM_NAME, TO_EMAIL, TO_NAME, SUBJECT, mailtext)


#----------------------------------------------------------------------
if __name__ == "__main__":
    main()

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten