Modul zum Senden von Emails (simplemail.py)

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

Montag 2. Juni 2008, 13:56

Habe mir jetzt dein Beispiel nicht richtig angesehen... Aber wie wäre es, das ganze im http://pypi.python.org/pypi zur Verfügung zu stellen. Evtl. sogar zur Aufnahme in Python vorschlagen?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 2. Juni 2008, 14:04

pypi werd ich mich mal mit auseinandersetzen, aufnahme in python denke ich nicht. Zumindest werde ich nicht als Maintainer einspringen, ich hab nur mal ein wenig dran rumgebastelt :)
Wobei das ja immernoch gerolds modul ist *g*
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Montag 2. Juni 2008, 16:55

Dann werde ich wohl demnächst schaun, wie zuverlässig das funzt ;)

Wenn demnächst ein Student nicht zu den Prüfungen angemeldet wird ist Gerold schuld :D
lunar

Montag 2. Juni 2008, 17:11

jens hat geschrieben:Habe mir jetzt dein Beispiel nicht richtig angesehen... Aber wie wäre es, das ganze im http://pypi.python.org/pypi zur Verfügung zu stellen. Evtl. sogar zur Aufnahme in Python vorschlagen?
Siehe mein vorheriges Posting: Auch du kannst das in den pypi eintragen, wenn dir daran so viel liegt ;)

Wenn EnTeQuAk oder jemand anders das dann übernehmen will, steht dem ja auch nichts im Weg ;)
Leon
User
Beiträge: 2
Registriert: Dienstag 10. Juni 2008, 22:06

Dienstag 10. Juni 2008, 22:13

Hi!

Ich find das simplemail sehr praktisch!
Allerdings verwende ich imap und wollte die gesendeten emails auch in meinem email-client und online sehen.
Deshalb habe ich ans simplemail.py noch folgenden text angefügt:

#
# Email nach gesendet kopieren...
#
imap_server = "imap.server.de"
im = imaplib.IMAP4(imap_server)
im.login(self.smtp_user, self.smtp_password)

im.select("Sent")
im.append("Sent", None, None, msg.as_string())

im.close()
im.logout()

Vielleicht hilfts ja jmd .-)

Leon
Benutzeravatar
snafu
User
Beiträge: 5459
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 16. Juni 2008, 19:00

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. :P
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 16. Juni 2008, 19:23

snafu hat geschrieben:Ansonsten wäre ja noch eine Methode gut, um unkompliziert gucken zu können ob neue Emails gekommen sind. :P
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.

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 Modvoice
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Donnerstag 19. Juni 2008, 11:37

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
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

Dienstag 29. Juli 2008, 11:12

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:

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)
Fehlermeldung:

Code: Alles auswählen

in send_mail
    print len(rec_list)
TypeError: object of type 'instancemethod' has no len()
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.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 29. Juli 2008, 12:07

Du musst die Funktion natürlich auch ausführen:

Code: Alles auswählen

rec_list = email.recipients.get_list()
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

Dienstag 29. Juli 2008, 13:27

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.

Code: Alles auswählen

    def pop_all(self):
        """Delete all attachments from list"""
        for i in range(len(self._attachments)):
                       self._attachments.pop()
Vielleicht geht das noch eleganter ^^ Funktionieren tut es jedenfalls.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dienstag 29. Juli 2008, 14:05

Code: Alles auswählen

    def pop_all(self):
        """Delete all attachments from list"""
        self._attachments = []
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Donnerstag 31. Juli 2008, 09:17

Ich hab die beiden Methoden mal eingebaut: http://svn.webshox.org/public/sandbox/simplemail.py


MfG EnTeQuAk
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Samstag 7. März 2009, 16:16

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

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')
Mein Code:

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()
Kann mir jemand helfen?

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]
;-)
sebste
User
Beiträge: 11
Registriert: Mittwoch 22. Juli 2009, 12:50

Donnerstag 23. Juli 2009, 09:36

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
Antworten