Das deutsche Python-Forum

10 Jahre Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Dienstag 2. September 2014, 01:24

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 97 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5 ... 7  Nächste
Autor Nachricht
 Betreff des Beitrags: Modul zum Senden von Emails (simplemail.py)
BeitragVerfasst: Montag 25. April 2005, 22:43 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
(Stichworte: Email versenden, Umlaute im Betreff, Coding, Attachments)

Hi!

Das Modul "simplemail" verwende ich zum Versenden von Emails.

Und so einfach ist es damit eine Email zu versenden:
  1. from simplemail import Email
  2. Email(
  3.     from_address = "absender@domain.at",
  4.     to_address = "empfaenger@domain.at",
  5.     subject = "Betreff",
  6.     message = "Das ist der Nachrichtentext"
  7. ).send()
Highlighting by GeSHi

Weitere Beispiele finden sich im Quellcode in der Funktion testen().

Um dieses Forum zu entlasten, habe ich den Quellcode ausgelagert:

>>> Hier findest du python-simplemail <<<

mfg
Gerold
:-)

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


Zuletzt geändert von gerold am Freitag 15. Januar 2010, 16:52, insgesamt 15-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Modul zum Senden von Emails mit Anhang (simplemail.py)
BeitragVerfasst: Samstag 20. August 2005, 10:59 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
(Stichworte: Email versenden, Umlaute im Betreff, Coding, Anhang, Anhänge, Attachment)

Hi!

- Es ist so weit -- simplemail.py kann jetzt auch mit Anhängen umgehen.
- (2005-09-29) Es gibt jetzt auch eine Möglichkeit, detailierte Rückmeldungen beim Versand an mehrere Adressen zu bekommen.
- (2005-11-11) Man kann sich jetzt auch am SMTP-Server mit Benutzername und Passwort anmelden.
- (2005-12-10) Schlampigkeitsfehler ausgebessert.

Es würde mich freuen, wenn du hier eine Nachricht hinterlässt, ob das Modul funktioniert oder ob es Fehler damit gibt.

mfg
Gerold
:-)

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


Zuletzt geändert von gerold am Mittwoch 22. März 2006, 16:50, insgesamt 9-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Einfaches Beispiel
BeitragVerfasst: Samstag 20. August 2005, 11:17 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
Einfaches Beispiel

  1. # Einfaches Beispiel
  2. from simplemail import Email
  3.  
  4. email = Email(
  5.     from_address = "von_adresse@domäne",
  6.     to_address = "empfaenger@domäne"
  7. )
  8. email.subject = "Das ist der Betreff mit Umlauten (öäüß)"
  9. email.message = "Das ist der Nachrichtentext mit Umlauten (öäüß)"
  10. email.send()
  11.  
Highlighting by GeSHi


Noch einfacheres Beispiel

  1. # Noch einfacheres Beispiel
  2. from simplemail import Email
  3. Email(
  4.     from_address = "von@domäne",
  5.     to_address = "empfänger@domäne",
  6.     subject = "Das ist der Betreff",
  7.     message = "Das ist der Nachrichtentext"
  8. ).send()
  9.  
Highlighting by GeSHi


lg
Gerold
:-)

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


Zuletzt geändert von gerold am Sonntag 2. Juli 2006, 18:06, insgesamt 3-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Komplexeres Beispiel mit Umlauten und Anhaengen
BeitragVerfasst: Samstag 20. August 2005, 11:42 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
Komplexeres Beispiel mit Umlauten und Anhaengen

  1. # Komplexeres Beispiel mit Umlauten und Anhaengen
  2. from simplemail import Email
  3.  
  4. email = Email()
  5.  
  6. # Ansender
  7. email.from_address = "von@domäne"
  8. email.from_caption = "Gerolds Server"
  9.  
  10. # Empfaenger
  11. email.recipients.add("gerold@gp-server.gp", "Gerold Penz (lokal)")
  12. email.recipients.add("gerold.penz@tirol.utanet.at", "Gerold Penz (utanet)")
  13.  
  14. # Betreff
  15. email.subject = "Komplexeres Beispiel"
  16.  
  17. # Nachricht
  18. email.message = \
  19.     "Das ist ein etwas komplexeres Beispiel\n" + \
  20.     "\n" + \
  21.     "Hier steht normaler Text mit Umlauten (öäüß).\n" + \
  22.     "Groß kann man sie auch schreiben -- ÖÄÜ.\n" + \
  23.     "\n" + \
  24.     "mfg\n" + \
  25.     "Gerold\n" + \
  26.     ":-)"
  27.  
  28. # Anhaenge
  29. email.attachments.add_filename("/home/gerold/font_shadow_fuzzy.jpg")
  30. email.attachments.add_filename(
  31.     "/home/gerold/GEROLD/Bilder und Videos/Eigene Fotos/Glock 19 auf Holzplatte.JPG"
  32. )
  33.  
  34. # Senden
  35. if email.send():
  36.     print "Nachricht gesendet."
  37. else:
  38.     print "Die Nachricht wurde nicht versendet."
  39.  
Highlighting by GeSHi


mfg
Gerold
:-)

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


Zuletzt geändert von gerold am Sonntag 2. Juli 2006, 18:08, insgesamt 3-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: HTML-Email
BeitragVerfasst: Samstag 20. August 2005, 11:54 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
HTML-Email

  1. # HTML-Email
  2. from simplemail import Email
  3.  
  4. email = Email(
  5.     from_address = "server@gp-server.gp",
  6.     to_address = "gerold@gp-server.gp"
  7. )
  8. email.subject = "Das ist ein HTML-Email"
  9. email.content_subtype = "html"
  10. email.message = \
  11. """
  12. <h1>Das ist die Überschrift</h1>
  13. <p>
  14.  Das ist ein <b>kleiner</b><br />
  15.  Absatz.
  16. </p>
  17. <p>
  18.  Das ist noch ein <i>Absatz</i>.
  19. </p>
  20. <p>
  21.  mfg<br />
  22.  Gerold<br />
  23.  :-)
  24. </p>
  25. """
  26. email.send()
  27.  
Highlighting by GeSHi

mfg
Gerold
:-)

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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Komplexeres Beispiel mit Umlauten und Anhaengen
BeitragVerfasst: Montag 12. September 2005, 13:49 
gerold hat geschrieben:
Komplexeres Beispiel mit Umlauten und Anhaengen

  1. # Komplexeres Beispiel mit Umlauten und Anhaengen
  2. from simplemail import Email
  3.  
  4. email = Email()
  5.  
  6. # Ansender
  7. email.from_address = "server@gp-server.gp"
  8. email.from_caption = "Gerolds Server"
  9.  
  10. # Empfaenger
  11. email.recipients.add("gerold@gp-server.gp", "Gerold Penz (lokal)")
  12. email.recipients.add("gerold.penz@tirol.utanet.at", "Gerold Penz (utanet)")
  13.  
  14. # Betreff
  15. email.subject = "Komplexeres Beispiel"
  16.  
  17. # Nachricht
  18. email.message = \
  19.     "Das ist ein etwas komplexeres Beispiel\n" + \
  20.     "\n" + \
  21.     "Hier steht normaler Text mit Umlauten (öäüß).\n" + \
  22.     "Groß kann man sie auch schreiben -- ÖÄÜ.\n" + \
  23.     "\n" + \
  24.     "mfg\n" + \
  25.     "Gerold\n" + \
  26.     ":-)"
  27.  
  28. # Anhaenge
  29. email.attachments.add_filename("/home/gerold/font_shadow_fuzzy.jpg")
  30. email.attachments.add_filename(
  31.     "/home/gerold/GEROLD/Bilder und Videos/Eigene Fotos/Glock 19 auf Holzplatte.JPG"
  32. )
  33.  
  34. # Senden
  35. if email.send():
  36.     print "Nachricht gesendet."
  37. else:
  38.     print "Die Nachricht wurde nicht versendet."
  39.  
Highlighting by GeSHi


mfg
Gerold
:-)

Hallo erstmal,
danke für dieses Script :D
leider habe ich noch das ein oder andere Problemchen:
ich habe den Quellcode von simplemail in eine neue Datei Namens simplemail.py eingefügt und abgespeichert.
Im selben Ordner habe ich eine Datei sendmail.py erzeugt und den Code des o.g. Beispiels eingefügt und abgespeichert.
In der simplemail.py habe ich dann noch den SMTP Server eingetragen und in der sendmail.py meinen Absender und einen Empfänger ausgetauscht.

Wenn ich jetzt die sendmail starte, bringt er mir immer sofort diesen Fehler:
Zitat:
Traceback (most recent call last):
File "G:\zv\dvo\WWW\HIS-Massenmail\sendmail.py", line 29, in ?
if email.send():
File "G:\zv\dvo\WWW\HIS-Massenmail\simplemail.py", line 416, in send
smtp.connect(self.smtp_server)
File "C:\PROGRA~1\Python23\lib\smtplib.py", line 302, in connect
raise socket.error, msg
error: (10061, 'Connection refused')


Wo liegt mein Fehler ?
MfG
Buschdel


Nach oben
  
 
 Betreff des Beitrags: Re: Komplexeres Beispiel mit Umlauten und Anhaengen
BeitragVerfasst: Montag 12. September 2005, 17:01 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
Anonymous hat geschrieben:
danke für dieses Script :D
[...]
ich habe den Quellcode von simplemail in eine neue Datei Namens simplemail.py eingefügt und abgespeichert.
Im selben Ordner habe ich eine Datei sendmail.py erzeugt und den Code des o.g. Beispiels eingefügt und abgespeichert.
In der simplemail.py habe ich dann noch den SMTP Server eingetragen und in der sendmail.py meinen Absender und einen Empfänger ausgetauscht.

Hi Buschdel!

Normalerweise versucht "simplemail.py" "localhost" als SMTP-Server zu verwenden. Wenn du lokal keinen SMTP-Server laufen hast, dann must du mit dem Parameter "smtp_server" einen anderen Server verwenden. Ich würde den Server *nicht* direkt im "simplemai.py"-Modul ändern.

  1. email = Email(
  2.     smtp_server = "localhost"
  3. )
Highlighting by GeSHi


Musst du dich evt. an deinem SMTP-Server anmelden, um senden zu können?

  1. email = Email(
  2.     smtp_server = "localhost",
  3.     smtp_user = "benutzername",
  4.     smtp_password = "passwort
  5. )
Highlighting by GeSHi


Vielleicht ist dieser Server so eingestellt, dass du dich zuerst an die Mailbox anmelden musst. Dann funktioniert dieses Skript sicher nicht.

mfg
Gerold
:-)

PS: Ich würde mein Skript nicht "sendmail.py" nennen. Das könnte sich evt. mal mit einem eingebauten Namen schlagen.

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


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Montag 26. September 2005, 15:20 
Moderator
Benutzeravatar

Registriert: Dienstag 10. August 2004, 10:40
Beiträge: 7454
Wohnort: duisburg
Ich hab dein simplemail testweise in PyLucid rein gepackt...

Lokal auf meinem Server läuft es, ich hab auch eine email verschicken lassen, die auch laut return-status verschickt wurde... Aber eigentlich hab ich auf dem Ubuntu mich nicht großartig mit eMail Server beschäftigt... Also es ist eigentlich nix dafür eingerichtet... Die email ist bisher auch nicht angekommen...

Kann man da noch mehr Status Informationen bekommen, ob die Email auch wirklich verschickt wurde???

Dann hab ich's mal bei Hosteurope versucht... Zu erstmal läuft das ganze nicht so einfach mit Python 2.2.1 :(
Aber naja, ich hab ja eh schon Backports eingebaut und diese dann mit ./Lib/email/* erweitert... Dennoch klappt es nicht. Ich erhalte einen SyntaxError in Iterators.py ???
Zitat:
SyntaxError: invalid syntax (Iterators.py, line 19)
__doc__ = 'Invalid syntax.'
__getitem__ = <bound method SyntaxError.__getitem__ of <exceptions.SyntaxError instance at 0x82d6a24>>
__init__ = <bound method SyntaxError.__init__ of <exceptions.SyntaxError instance at 0x82d6a24>>
__module__ = 'exceptions'
__str__ = <bound method SyntaxError.__str__ of <exceptions.SyntaxError instance at 0x82d6a24>>
args = ('invalid syntax', ('PyLucid_python_backports/email/Iterators.py', 19, 14, ' yield self\n'))
filename = 'PyLucid_python_backports/email/Iterators.py'
lineno = 19
msg = 'invalid syntax'
offset = 14
print_file_and_line = None
text = ' yield self\n'


Anscheinend irgendwas mit yield... Der Teil aus Iterators.py:
  1. def walk(self):
  2.     """Walk over the message tree, yielding each subpart.
  3.  
  4.    The walk is performed in depth-first order.  This method is a
  5.    generator.
  6.    """
  7.     yield self
  8.     if self.is_multipart():
  9.         for subpart in self.get_payload():
  10.             for subsubpart in subpart.walk():
  11.                 yield subsubpart
Highlighting by GeSHi


EDIT: OK, wenn ich in Iterators.py ein "from __future__ import generators" einfüge geht's weiter, mit dem nächsten Fehler:
Zitat:
NameError: global name 'basestring' is not defined
__doc__ = 'Name not found globally.'
__getitem__ = <bound method NameError.__getitem__ of <exceptions.NameError instance at 0x832d6ac>>
__init__ = <bound method NameError.__init__ of <exceptions.NameError instance at 0x832d6ac>>
__module__ = 'exceptions'
__str__ = <bound method NameError.__str__ of <exceptions.NameError instance at 0x832d6ac>>
args = ("global name 'basestring' is not defined",)

_________________

CMS in Python: http://www.pylucid.org
GitHub | ohloh Profil
1JEgSQepxGjdprNedC9tXQWLpS424AL8cd


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Dienstag 27. September 2005, 11:52 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
Hi Jens!

jens hat geschrieben:
Kann man da noch mehr Status Informationen bekommen, ob die Email auch wirklich verschickt wurde???

Ich werde meinen Code noch einmal durchgehen und mehr Statusmeldungen über den Versand zurück geben.

jens hat geschrieben:
Aber naja, ich hab ja eh schon Backports eingebaut und diese dann mit ./Lib/email/* erweitert... Dennoch klappt es nicht. Ich erhalte einen SyntaxError in Iterators.py ???

Hier stehe ich an -- mit diesen Meldungen kann ich nichts anfangen. Da kann ich dir leider nicht weiter helfen.

lg
Gerold
:-)

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


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Dienstag 27. September 2005, 16:20 
Moderator
Benutzeravatar

Registriert: Dienstag 10. August 2004, 10:40
Beiträge: 7454
Wohnort: duisburg
Hab mir jetzt eine mini-Klasse gebastelt, mit der es geht's:
  1. class email:
  2.     def send(self, to, subject, text):
  3.         import time, smtplib
  4.         from email.MIMEText import MIMEText
  5.  
  6.         msg = MIMEText(
  7.             _text = text,
  8.             _subtype = "plain",
  9.             _charset = "UTF-8"
  10.         )
  11.         msg['From'] = "auto_mailer@blablabla"
  12.         msg['To'] = to
  13.         msg['Subject'] = subject
  14.         # Datum nach RFC 2822 Internet email standard.
  15.         msg['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
  16.         msg['User-Agent'] = "PyLucid (Python v%s)" % sys.version
  17.  
  18.         s = smtplib.SMTP()
  19.         s.connect()
  20.         s.sendmail(msg['From'], [msg['To']], msg.as_string())
  21.         s.close()
Highlighting by GeSHi


Ich brauche eigentliche eh nur plain-text Nachrichten...

_________________

CMS in Python: http://www.pylucid.org
GitHub | ohloh Profil
1JEgSQepxGjdprNedC9tXQWLpS424AL8cd


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Donnerstag 29. September 2005, 13:17 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
gerold hat geschrieben:
Ich werde meinen Code noch einmal durchgehen und mehr Statusmeldungen über den Versand zurück geben.

Hi!

Ich habe den Code um mehr Statusmeldungen erweitert. Generell kann man aber von folgender Aussage ausgehen:

Wenn eine Email an *einen* Empfänger geschickt wird und dabei kein Fehler auftritt, dann hat der SMTP-Server die Email akzeptiert oder zumindest stillschweigend angenommen.
Wenn die Email trotzdem nicht an ein Postfach ausgeliefert wird, dann sollte man sich die Logfiles des SMTP-Servers ansehen.

Schickt man ein Email an *mehrere* Empfänger, dann tritt kein Fehler auf, wenn die Email an mindestens einen Empfänger geschickt werden konnte. Um herauszufinden, ob auch wirklich alle Empfänger das Email zugesandt bekommen haben, kann man jetzt zusätzlich das Attribut `statusdict` abfragen.
  1. if email.statusdict:
  2.     print "Fehler bei mind. einem Empf."
  3.     print email.statusdict
  4. else:
  5.     print "OK"
Highlighting by GeSHi


lg
Gerold
:-)

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


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Donnerstag 10. November 2005, 17:12 
User

Registriert: Samstag 8. Mai 2004, 14:06
Beiträge: 10
Wohnort: Bremen
Hab' mir das Modul mal angeschaut. Klappte bei mir mit dem Anmelden bei meinem Provider nicht. Habe deshalb folgende Zeilen geändert:

  1. smtp = smtplib.SMTP()
  2. # Geändert zu
  3. smtp = smtplib.SMTP(self.smtp_server)
  4.  
Highlighting by GeSHi


und

  1. smtp.connect(self.smtp_server)
  2. # Geändert zu
  3. smtp.login(self.smtp_user, self.smtp_password)
  4.  
Highlighting by GeSHi


Dann Email mit dem passenden Konstruktor aufrufen - Klappt super :)

Wie sieht's mit dem Copyright aus? Darf ich das Modul in nen Programm von mir integrieren? Ist echt ne nette Lösung!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Donnerstag 10. November 2005, 17:18 
Administrator
Benutzeravatar

Registriert: Freitag 20. Juni 2003, 17:30
Beiträge: 15924
ChrisSek hat geschrieben:
Wie sieht's mit dem Copyright aus? Darf ich das Modul in nen Programm von mir integrieren? Ist echt ne nette Lösung!

Im Header steht doch, dass es unter LGPL steht. Also: ja.

_________________
My god, it's full of CARs! | Leonidasvoice vs Modvoice


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Donnerstag 10. November 2005, 17:25 
User

Registriert: Samstag 8. Mai 2004, 14:06
Beiträge: 10
Wohnort: Bremen
Leonidas hat geschrieben:
Im Header steht doch, dass es unter LGPL steht. Also: ja.


Ups, hab ich total überlesen. Sorry und danke :)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Donnerstag 10. November 2005, 17:47 
Python-Forum Veteran
Benutzeravatar

Registriert: Samstag 28. Februar 2004, 23:04
Beiträge: 5550
Wohnort: Oberhofen im Inntal (Tirol)
ChrisSek hat geschrieben:
Hab' mir das Modul mal angeschaut. Klappte bei mir mit dem Anmelden bei meinem Provider nicht.
[...]
Dann Email mit dem passenden Konstruktor aufrufen - Klappt super :)

Wie sieht's mit dem Copyright aus? Darf ich das Modul in nen Programm von mir integrieren? Ist echt ne nette Lösung!

Hi ChrisSek!

Natürlich darfst du es verwenden. Deshalb habe ich es hier rein gestellt und es freut mich, wenn es verwendet wird.

Das mit der Authentifizierung werde ich demnächst einbauen. Da sieht man wieder, wie schnell etwas vergessen wird, wenn man etwas selbst nicht braucht. :shock:

Danke für den Hinweis. :D

mfg
Gerold
:-)

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


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 97 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5 ... 7  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de