
Modul zum Senden von Emails (simplemail.py)
Superteil: einfach zu bedienen und bei der Verwendung sehr gut lesbar. Soll simplemail denn auch auf Dauer nur zum Versand genutzt werden? Ansonsten wäre ja noch eine Methode gut, um unkompliziert gucken zu können ob neue Emails gekommen sind. 

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Bitte nicht. Es gibt viel zu viele Methoden wie man auf Mails zugreifen kann: IMAP4, POP3, Maildir (+ Abwandlungen), MH, mbox (+ Abwandlungen), dass das definitiv übers ziel hinausschießen würde.snafu hat geschrieben:Ansonsten wäre ja noch eine Methode gut, um unkompliziert gucken zu können ob neue Emails gekommen sind.
Wenn du so etwas willst, solltest du ein anderes Modul nehmen.
Zawinski's Law hat geschrieben:Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Also zumindest ich habe nicht vor auch noch einen E-Mail Empfang einzubauen, da das dann auch imho den Sinn dieses Moduls übersteigt. Klein, Fein und leicht zu benutzen. Sollte ich da noch nen Empfang einbauen, am besten noch die von Leonidas genannten -- nein Danke.
Aber hey, es steht jedem Frei das Programm nach seinen Interessen zu erweitern :=)
Gruß, Christopher
Aber hey, es steht jedem Frei das Programm nach seinen Interessen zu erweitern :=)
Gruß, Christopher
Vielen Dank für dieses tolle Modul, Gerold!
Funktioniert einwandfrei, nur leider stelle ich mich etwas blöd an. Ich habe eine Schleife, die die Empfänger aus einer Datei ausliest. Da man später ja Empfänger nur noch per recipients.add() hinzufügen kann, müsste ich dann den jeweils ersten Empfänger der Liste wieder entfernen.
Ich finde nur nicht raus, wie ich Zugriff auf die recipients-Liste kriege. Wenn ich probiere, die Liste direkt zu bearbeiten, bekomme ich eine Meldung, dass das Objekt len(), append(), pop(), usw. nicht kennt. Hier ein Beispiel:
Fehlermeldung:
Kann mir da vielleicht jemand auf die Sprünge helfen? Ich würde gerne die Empfängerliste bearbeiten irgendwie.
Ich hoffe, die Frage ist hier im Thread richtig aufgehoben.
Funktioniert einwandfrei, nur leider stelle ich mich etwas blöd an. Ich habe eine Schleife, die die Empfänger aus einer Datei ausliest. Da man später ja Empfänger nur noch per recipients.add() hinzufügen kann, müsste ich dann den jeweils ersten Empfänger der Liste wieder entfernen.
Ich finde nur nicht raus, wie ich Zugriff auf die recipients-Liste kriege. Wenn ich probiere, die Liste direkt zu bearbeiten, bekomme ich eine Meldung, dass das Objekt len(), append(), pop(), usw. nicht kennt. Hier ein Beispiel:
Code: Alles auswählen
def send_mail(mail_to, attachment, path_to_here):
email.recipients.add(mail_to)
rec_list = email.recipients.get_list
print len(rec_list)
Code: Alles auswählen
in send_mail
print len(rec_list)
TypeError: object of type 'instancemethod' has no len()
Ich hoffe, die Frage ist hier im Thread richtig aufgehoben.
Du musst die Funktion natürlich auch ausführen:
Code: Alles auswählen
rec_list = email.recipients.get_list()
Oooh, die Klammern waren's. Vielen Dank!
Klappt tadellos! Habe die Recipients-Klasse jetzt um eine pop-Methode erweitert, damit sie mir alle Empfänger bis auf den gerade gebrauchten wieder rauswirft
EDIT: Habe jetzt auch die Attachment-Klasse etwas modifiziert, sodass man alle Dateianhänge, die bis dahin in der Liste waren, rausnehmen kann. Vielleicht kannst du es ja gebrauchen.
Vielleicht geht das noch eleganter ^^ Funktionieren tut es jedenfalls.
Klappt tadellos! Habe die Recipients-Klasse jetzt um eine pop-Methode erweitert, damit sie mir alle Empfänger bis auf den gerade gebrauchten wieder rauswirft

EDIT: Habe jetzt auch die Attachment-Klasse etwas modifiziert, sodass man alle Dateianhänge, die bis dahin in der Liste waren, rausnehmen kann. Vielleicht kannst du es ja gebrauchen.
Code: Alles auswählen
def pop_all(self):
"""Delete all attachments from list"""
for i in range(len(self._attachments)):
self._attachments.pop()
Code: Alles auswählen
def pop_all(self):
"""Delete all attachments from list"""
self._attachments = []
Ich hab die beiden Methoden mal eingebaut: http://svn.webshox.org/public/sandbox/simplemail.py
MfG EnTeQuAk
MfG EnTeQuAk
Sehr geehrtes Python Forum,
Ich habe versucht mal ein bisschen mit SM herumzuspielen, aber es funktioniert nicht
Ich habe es mit mehreren Möglichkeiten versucht.
Der Fehler ist immer
Mein Code:
Kann mir jemand helfen?
Danke!
Ich habe versucht mal ein bisschen mit SM herumzuspielen, aber es funktioniert nicht
Ich habe es mit mehreren Möglichkeiten versucht.
Der Fehler ist immer
Code: Alles auswählen
Traceback (most recent call last):
File "C:/Dokumente und Einstellungen/Robin/Desktop/VIRUS/New Main/email.py", line 14, in <module>
email.send()
File "C:\Python\Lib\simplemail.py", line 343, in send
smtp.connect(self.smtp_server)
File "C:\Python\lib\smtplib.py", line 310, in connect
raise socket.error, msg
error: (10061, 'Connection refused')
Code: Alles auswählen
from simplemail import Email
email = Email()
email.from_address = "meine email@web.de"
email.smpt_server = "smtp.web.de"
email.smtp_user = "meine email"
email.smtp_password = "PASSWORT"
email.to_address = ""
email.subject = "Test "
email.message = """Das ist die Nachricht
Noch ne Zeile"""
email.recipients.add("")
email.use_tls = True
email.send()
Danke!
Zuletzt geändert von INFACT am Mittwoch 14. April 2010, 21:20, insgesamt 1-mal geändert.
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
;-)
Hallo Gerold!
Vielen Dank für dieses schöne Stück Software!
Ich verwende simplemail zum versenden von html mails. Bei einigen wenigen Empfängern kommen die Mails verstümmelt an (Umlaute und Sonderzeichen werden nicht oder falsch dargestellt) Mein verdacht war dass irgendwo eine angabe für das charset fehlt und die clients raten.
Was das coding angeht sieht es so aus:
Coding der Pythonmodule: utf-8 (ausser simplemail, das habe ich gelassen wie es ist)
content_subtype = "text/html"
content_charset = "iso-8859-1"
header_charset = "utf-8"
Im meta des HTML codes habe ich ebenfalls utf-8 als charset angegeben.
--
Erster Gedanke: content_charset ebenfalls auf utf-8 setzen, wäre ja naheliegend. wenn ich das tue, wird in der mail wird dann der größte Teil einfach abgeschnitten.
--
Irgend eine Idee was da schief läuft? Das Problem ist, ich kann den Fehler hier nicht nachstellen, da bei allen Rechnern mit verschiedenen os und clients alles gut aussieht. Ach ja, Die Empfänger mit dem Problem verwenden Outlook 2003 / SP3. Laut code der Antworten scheint auch ein Exchangeserver irgendwo beteiligt zu sein.
Liebe Grüße, Sebastian
Vielen Dank für dieses schöne Stück Software!
Ich verwende simplemail zum versenden von html mails. Bei einigen wenigen Empfängern kommen die Mails verstümmelt an (Umlaute und Sonderzeichen werden nicht oder falsch dargestellt) Mein verdacht war dass irgendwo eine angabe für das charset fehlt und die clients raten.
Was das coding angeht sieht es so aus:
Coding der Pythonmodule: utf-8 (ausser simplemail, das habe ich gelassen wie es ist)
content_subtype = "text/html"
content_charset = "iso-8859-1"
header_charset = "utf-8"
Im meta des HTML codes habe ich ebenfalls utf-8 als charset angegeben.
--
Erster Gedanke: content_charset ebenfalls auf utf-8 setzen, wäre ja naheliegend. wenn ich das tue, wird in der mail wird dann der größte Teil einfach abgeschnitten.
--
Irgend eine Idee was da schief läuft? Das Problem ist, ich kann den Fehler hier nicht nachstellen, da bei allen Rechnern mit verschiedenen os und clients alles gut aussieht. Ach ja, Die Empfänger mit dem Problem verwenden Outlook 2003 / SP3. Laut code der Antworten scheint auch ein Exchangeserver irgendwo beteiligt zu sein.
Liebe Grüße, Sebastian
Ok - bin mittlerweile ein stück weiter,
hatte den content mal explizit nach utf8 encoded, seither sieht es ganz gut aus. Getested habe ich es noch nicht. Allerdings gehe ich auch davon aus, dass am client irgendwelche komischen codings eingestellt sein könnten.
Komisch ist aber, dass der content immer base64 codiert wird, sobald ich content_charset auf utf-8 umstelle. quoted printable wäre natürlich schöner. ist das normal oder ein bug?
hatte den content mal explizit nach utf8 encoded, seither sieht es ganz gut aus. Getested habe ich es noch nicht. Allerdings gehe ich auch davon aus, dass am client irgendwelche komischen codings eingestellt sein könnten.
Komisch ist aber, dass der content immer base64 codiert wird, sobald ich content_charset auf utf-8 umstelle. quoted printable wäre natürlich schöner. ist das normal oder ein bug?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo sebste!
mfg
Gerold

Da bin ich froh, denn ich kann mich im Moment nicht darum kümmern.sebste hat geschrieben:Ok - bin mittlerweile ein stück weiter
Mit base64 kann jeder Email-Client umgehen, deshalb ist das für mich im Moment nicht wichtig. Ich werde mich sowiso in ein paar Monaten nochmal um simplemail kümmern. Ein kleiner Rewrite kann nicht schaden.sebste hat geschrieben:Komisch ist aber, dass der content immer base64 codiert wird, sobald ich content_charset auf utf-8 umstelle. quoted printable wäre natürlich schöner. ist das normal oder ein bug?
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
https://www.xing.com/go/invite/18513630.6a91d4
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo lutz.horn!lutz.horn hat geschrieben:Wie wäre es, es auf http://pypi.python.org/ zu veröffentlichen?
Das ist auf meiner ToDo-Liste.

mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Allerdings.gerold hat geschrieben:Ein kleiner Rewrite kann nicht schaden.

Ich würde Dinge wie Recipients.count() z.B. eher als Property lösen. Die ganze Klasse eignet sich IMHO dazu, von `list` zu erben. Für Attachements würde ich wahrscheinlich überhaupt keine eigene Klasse machen, sondern einfach ne Liste verwenden.
Gibts doch schon 
Nur müsste das mal einer weiter machen… Unittests, Docs usw. fehlen nun ja…
Gruß, Christopher.

Nur müsste das mal einer weiter machen… Unittests, Docs usw. fehlen nun ja…

Gruß, Christopher.
Hi,
vielen Dank erstmal für simplemail.py!
Ich hätte da noch nen Verbesserungsvorschlag:
Im exim-log file hatte ich die folgende Fehlermeldung (natürlich nur, wenn ich STARTTLS verwende...):
TLS error on connection from (recv): A TLS packet with unexpected length was received.
Dann habe ich Zeile 400 im simplemail.py geändert:
alt: smtp.close()
neu: smtp.quit()
(so stehts in den docs: https://docs.python.org/2/library/smtplib.html)
Und nun funktionierts
vielen Dank erstmal für simplemail.py!
Ich hätte da noch nen Verbesserungsvorschlag:
Im exim-log file hatte ich die folgende Fehlermeldung (natürlich nur, wenn ich STARTTLS verwende...):
TLS error on connection from (recv): A TLS packet with unexpected length was received.
Dann habe ich Zeile 400 im simplemail.py geändert:
alt: smtp.close()
neu: smtp.quit()
(so stehts in den docs: https://docs.python.org/2/library/smtplib.html)
Und nun funktionierts

- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!
Da ich die alten Beiträge nicht mehr editieren kann: Hier die neuen Links zu Simplemail.
lg
Gerold

Da ich die alten Beiträge nicht mehr editieren kann: Hier die neuen Links zu Simplemail.
- PyPi: https://pypi.python.org/pypi/python-simplemail/
Github: https://github.com/gerold-penz/python-simplemail
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Leon!Leon hat geschrieben:Dann habe ich Zeile 400 im simplemail.py geändert:
alt: smtp.close()
neu: smtp.quit()
(so stehts in den docs: https://docs.python.org/2/library/smtplib.html)
Und nun funktionierts
Danke. Ist jetzt in der aktuellen Version.
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!
Bitte schreibt Bug-Berichte und Wünsche für python-simplemail ins Github. Ich werde alle paar Wochen etwas davon abarbeiten.
--> https://github.com/gerold-penz/python-simplemail/issues <--
lg
Gerold

Bitte schreibt Bug-Berichte und Wünsche für python-simplemail ins Github. Ich werde alle paar Wochen etwas davon abarbeiten.
--> https://github.com/gerold-penz/python-simplemail/issues <--
lg
Gerold

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