halvar.at bcom Python Tools Plone Zope Visual Basic Programmierung SW3 PC Computer Netzwerk Linux Windows Shop

Skip to content

Gerolds Homepage

Sections
Personal tools
You are here: Home Python Python Code Erinnerung per Email
Navigation
Log in


Forgot your password?
 
Document Actions

Erinnerungen per Email verschicken

Erinnerungen, die mit dem Programm "birthday" verwaltet werden, per Email verschicken

Hallo!

Ich habe ein kleines Python-Skript geschrieben, mit dem man eine aktuelle Terminübersicht per Email zugeschickt bekommt. Das möchte ich euch natürlich nicht vorenthalten.
Aus diesem Skript geht recht gut hervor, wie Funktionen deklariert und aufgerufen werden, wie man Emails mit Python verschickt, und wie man die Ausgabe eines Kommandozeilenprogramms in Python verwenden kann.

Zu finden unter:
http://python.sandtner.org/viewtopic.php?t=1798
oder neuerdings unter
http://www.python-forum.de/viewtopic.php?t=1798

lg,
Gerold
:-)

 

Falls das Forum mal nicht erreichbar ist, zeige ich den Inhalt hier auch noch einmal an:

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

'email_birthday.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:
#!/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()

Und so sieht ein fertiges Email aus:

Erinnerungen:
------------------------------------------------------------------------------
"Bernhard" hat Geburtstag -- in 2 Tagen.
"Maria" hat Geburtstag -- in 2 Tagen.
"Roman" hat Geburtstag -- in 3 Tagen.
"Englischkurs (18:00 Uhr)" in 5 Tagen.
"Gerri in Tirol :-)" Dauert 2 Tage in 1 Woche(n).
------------------------------------------------------------------------------

Kalender:
------------------------------------------------------------------------------
---Donnerstag-März-16-2006----------------------------------------------------


---Freitag-März-17-2006-------------------------------------------------------


---Samstag-März-18-2006-------------------------------------------------------
"Bernhard" hat Geburtstag    "Maria" hat Geburtstag    

---Sonntag-März-19-2006-------------------------------------------------------
"Roman" hat Geburtstag    

---Montag-März-20-2006--------------------------------------------------------


---Dienstag-März-21-2006------------------------------------------------------
"Englischkurs (18:00 Uhr)"    

---Mittwoch-März-22-2006------------------------------------------------------
 

Powered by Plone   Powered by Bcom   Powered by Gentoo-Linux

Diese Seite erfüllt evt. :-) folgende Standards: