Modul zum Senden von Emails (simplemail.py)

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

pascalsv hat geschrieben:Ich würde aber gerne wissen, für was diese Slots gut sind:
Zur Speicheroptimierung, s. http://pythonwiki.pocoo.org/Allgemeine_Begriffe

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi Pascal!
pascalsv hat geschrieben:beindruckendes Modul!!
Danke! Ich habe aber gerade eben bemerkt, dass nur 10 kB des Modules angezeigt wurden. Deshalb habe ich soeben den Codehighlighter dieses Forums so umgestellt, dass man jetzt den kompletten Code sieht.
pascalsv hat geschrieben:Ich würde aber gerne wissen, für was diese Slots gut sind
[...]
Ist es damit möglich, zur Initialisierung schon die entsprechenden Parameter mitzugeben?
Das war mein erster Versuch mit den New-Style-Klassen von Python zu arbeiten. Ein Feature dieser Klassen ist, dass man die Namen der Variablen, die an die Klasseninstanz gebunden werden können, bekannt geben kann. Python warnt einen dann, wenn man im Code eine Instanzvariable verwendet, die noch nicht definiert wurde und Speicher wird auch gespart, da dadurch die Instanzvariablen anders verwaltet werden.

Da ich das von Visual Basic her gewohnt war, dachte ich, das ist keine schlechte Idee und verwendete es. In der Zwischenzeit bin ich zum Schluss gekommen, dass es nur Zeitverschwendung ist. Ich habe dadurch mehr Aufwand beim Programmieren und schränke die Möglichkeiten einer Klasse mehr ein als notwendig ist. Die Verwendung von __slots__ hat, in meinen Augen, nur dann einen Vorteil, wenn ich die Klasse optimieren muss.

Würde ich heute das Modul neu schreiben, würde ich keine Slots mehr verwenden, da es sich ja nicht um eine Klasse handelt, die hochoptimiert mehrmals aufgerufen wird. Es war ein Versuch und es schadet ja auch niemandem.

Der Effekt, dass man schon beim Erzeugen der Klasse Daten übergeben kann, kommt alleine von der Methode __init__(). Diese Methode wird beim Instanzieren der Klasse aufgerufen. Ich habe das Modul so programmiert, dass es dem, der das Modul verwendet, überlassen wird, ob die Daten schon beim Instanzieren oder später übergeben werden.

mfg
Gerold
:-)
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!

Neues Feature:
Es wurden neue Klassen fuer CC-Empfaenger (Carbon Copy) und BCC-Empfaenger (Blind Carbon Copy) hinzugefuegt. Ab jetzt können Emails auch an CC und BCC gesendet werden. Wie das funktioniert sieht man in der Funktion ``testen()``

lg
Gerold
:-)
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!

Reply-to (Antwort an) kann jetzt auch angegeben werden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
resi
User
Beiträge: 2
Registriert: Sonntag 28. Mai 2006, 11:32

Servus Gerold

simplemail ist ein tolles Tool, die Dokumentation ist ausserdem vorbildlich.
Was m.E. fehlt, ist ein Header für das Datum, das kann nämlich den Spam-
Core negativ beeinflußen.

Das könnte dann etwa so implementiert werden:

from email.Utils import formatdate

und in send():
...
msg['Date'] = formatdate(time.time())

Desweiteren stellt sich die Frage, ob du nicht auch/stattdessen einen generischen
Header-Eintrag zulässt, also:

email = Email(......)
email.add_header('X-YZ', 'Wert')
email.send()

Gruß,
Karl.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

resi hat geschrieben:simplemail ist ein tolles Tool, die Dokumentation ist ausserdem vorbildlich. Was m.E. fehlt, ist ein Header für das Datum, das kann nämlich den Spam-
Core negativ beeinflußen.
Hi Karl!

Danke für dein Lob und deinen Hinweis. Was den Datums-Header betrifft, habe ich ihn damals sogar absichtlich weg gelassen, da bei meinen Tests der SMTP-Server das Datum automatisch hinzugefügt hat. (getestet mit Postfix) Mir ist es lieber, wenn der Server den Zeitstempel aufdrückt, da die Uhrzeit bei Servern -- glaube ich -- nicht so oft falsch geht wie bei den Clients.

Falls das allerdings andere SMTP-Server **nicht** automatisch machen, dann werde ich das Datum wohl doch dazu tun müssen.

@All: Was ich jetzt brauche, ist eine Antwort auf die Frage: "Gibt es SMTP-Server, die das Datum nicht automatisch hinzufügen?"
Wenn Ja, welche?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
resi
User
Beiträge: 2
Registriert: Sonntag 28. Mai 2006, 11:32

Hi Gerold,

Bei mir hat der SMTP Server (exim4) es nicht automatisch hinzugefügt.
Möglicherweise könnte man den exim4 dahingehend konfigurieren, aber
wenn's dein Modul _auch_ kann, ist es ja kein Schaden :-)

Oder wie gesagt, _beliebige_ weitere Header vom User dazufügen zu lassen.

Gruß,
Karl.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

resi hat geschrieben:Bei mir hat der SMTP Server (exim4) es nicht automatisch hinzugefügt.
Hi Karl!

Ich wusst schon immer, warum ich bei Debian-Installationen Exim sofort durch Postfix ersetzt habe. :-)

Da Exim leider durch die Verwendung in Debian ziemlich oft eingesetzt wird, bleibt mir nichts anderes übrig. Ich werde also das Datum als Header in simplemail einbauen.

Noch einmal vielen Dank für deinen Hinweis.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Sonntag 28. Mai 2006, 19:04, 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:

Hi!

Änderungen:

* 2006-05-28 Gerold
* - Wortlaut des Headers "User-Agent" geändert.
* - Da nicht jeder SMTP-Server das Datum automatisch zum Header hinzufügt,
* wird ab jetzt das Datum beim Senden hinzugefügt.
* (Karl, danke für den wichtigen Hinweis.)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@gerold: hast du keinen SVN Server auf dem du das Skript hinterlegen kannst??? Dann könnte ich es einfach mit svn-externals einbinden ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jens hat geschrieben:@gerold: hast du keinen SVN Server auf dem du das Skript hinterlegen kannst??? Dann könnte ich es einfach mit svn-externals einbinden ;)
Hi Jens!

Noch nicht, aber ich arbeite daran. Wahrscheinlich richte ich auf einem unserer Firmen-Internetserver ein Trac für solche Skripte ein.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Ist die Version im ersten Post die aktuelle?

Ist zwar nicht so wichtig, aber mir ist aufgefallen, dass an einer Stelle en und de vertauscht sind:

Code: Alles auswählen

class AttachmentNotFound_Exception(Exception):
    """
    en: Das uebergebene Attachment wurde nicht gefunden
    de: Attachment not found
    """
    pass 
:D
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Rebecca hat geschrieben:Ist die Version im ersten Post die aktuelle?
Ist zwar nicht so wichtig, aber mir ist aufgefallen, dass an einer Stelle...
Hi Rebecca!

Ja, im ersten Beitrag steht immer die aktuelle Version. Ich habe jetzt auch einen Hinweis darauf hinzugefügt.

Der Fehler wurde ausgebessert.

Code: Alles auswählen

*   - Fehlerklassen von **SimpleMail_Exception** abgeleitet. Damit wird
*     bei einem Fehler jetzt auch eine aussagekräftigere Fehlermeldung
*     ausgegeben. Dabei habe ich auch die vertauschten Fehlermeldungen
*     ausgetauscht. (Rebecca, danke für die Meldung.)
*   - Da die Klassen **CCRecipients** und **BCCRecipients** sowiso von
*     **Recipients** abgeleitet wurden, kann ich mir das Überschreiben
*     der Initialisierung (__init__) und die Angabe der Slots sparen.
mfg
Gerold
:-)
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:

jens hat geschrieben:@gerold: hast du keinen SVN Server auf dem du das Skript hinterlegen kannst??? Dann könnte ich es einfach mit svn-externals einbinden ;)
Hi Jens!

Es entwickelt sich. :D

Ich (wir) richte(n) gerade ein öffentlich zugängliches Subversion-Repository und ein Trac für "simplemail" ein.

Allerdings würde ich das Projekt erst dann bei dir einbinden, wenn ich ein richtiges Paket daraus gemacht habe. Es wird sich in den nächsten Tagen noch einiges daran ändern.

Aber die URLs stehen schon mal fest.

Trac: http://gelb.bcom.at/trac/simplemail/
SVN: http://gelb.bcom.at/svn/pub/simplemail/

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Eine komplettes trac/SVN nur für simplemail??? Ist das nicht zuviel des guten ;)

Ich meine, vielleicht legst du es besser so an:
  • simplemail/branches
    simplemail/tags
    simplemail/trunk
Dann hast du noch Platz für andere Sachen ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jens hat geschrieben:Eine komplettes trac/SVN nur für simplemail??? Ist das nicht zuviel des guten ;)
Hi Jens!

Das passt schon so. 8)
Ich mag es nicht, wenn sich alles mischt. Die Emails über Änderungen im Repository, das Wiki, die Timeline, die Roadmap, die Tickets,...

Ein Programm -- Ein Trac. So ist es mir am Liebsten.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rogen
User
Beiträge: 85
Registriert: Dienstag 29. März 2005, 17:45
Wohnort: neustift
Kontaktdaten:

frage

kann ich ein bild in ein html email einfügen ?

mfg

gerhard
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

rogen hat geschrieben:kann ich ein bild in ein html email einfügen ?
Hallo Gerhard!

Leider nur als Link zu einem Bild auf einem Internetserver. Bilder werden derzeit nicht in das Email eingebunden. Das steht aber ganz weit oben in meiner Wunschliste.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Hallo Gerold,
warscheinlich sehe ich den Wald vor lauter Bäumen nicht... aber ich ich sitze nun schon seit 2 Stunden an einem Fehler und komm nicht drauf wo der steckt...

folgender Code

Code: Alles auswählen

        simplemail.from_address = "u@a.de"
        simplemail.from_caption = "ich"
        simplemail.smtp_user = "xxxxxxx"
        simplemail.smtp_password = "xxxxxxx"
        simplemail.to_address = "u@a.de"
erzeugt folgende Fehlermeldung
'Email' object has no attribute 'to_address'
hat jemand dazu eine Idee?

Gruß
Damaskus
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Damaskus hat geschrieben:

Code: Alles auswählen

        simplemail.from_address = "u@a.de"
        simplemail.from_caption = "ich"
        simplemail.smtp_user = "xxxxxxx"
        simplemail.smtp_password = "xxxxxxx"
        simplemail.to_address = "u@a.de"
Servus Damaskus!

to_address lässt sich nur beim Initialisieren übergeben. Wenn du im Nachhinein einen Empfänger hinzufügen möchtest, dann funktioniert da so:

Code: Alles auswählen

simplemail.recipients.add("to_address", "to_caption")
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten