Mails mit Ausgabe Print versenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hi,

ich bastel gerade an einem kleine script - aber vielleicht gibt mir jemand den richtigen tipp gleich mit? Ich müsste verstehen wie ich bei einem Email test also direkt nach den """ dem script klarmache hier kommt jetzt die Ausgabe rein die ich mir hab vorher mit print(zeile) habe anzeigen lassen.

bzw kann das script sie natürlich auch direkt verschicken das ist egal ausgabe leite ich eh in NULL um. (entferne ich dann natürlich noch)

Code: Alles auswählen

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

cursor = connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
cursor.execute("select * from test;")

ergebnis = cursor.fetchall()
for zeile in ergebnis:
  print(zeile)



sender = 'abc@defg.de'
receivers = ['test@test.de']


message = """From: <abc@defg.de>
To: test@test.de'
Subject: testbericht
This is a test e-mail message from test.py: 


tja, hier sollte nun das stehen was ich mir oben mit print(Zeile) habe anzeigen lassen

"""
try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Python2 solltest Du nicht mehr benutzen, sondern auf Python3 umsteigen.
Du gibst einfach nichts per `print` aus, sondern speicherst die Ausgabe in einer Variable.
Die Mailnachricht baut man sich nicht händisch zusammen, sondern benutzt MIMEMultipart, das Du ja schon importierst.
Die "Fehlerbehandlung" ist schlecht, weil Du jede Chance, den Grund des Fehlers zu erkennen, effektiv verhinderst. Lass das einfach weg.
Die Stringrepräsentation von Wörterbüchern ist eigentlich nicht dazu gedacht, per Mail verschickt zu werden.

Hier ist das ja trivial:

Code: Alles auswählen

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText


def sendmail(sender, receivers, subject, text):
    msg = MIMEMultipart()
    msg['From'] = sender
    msg['To'] = ', '.join(receivers)
    msg['Subject'] = subject
    msg.attach(MIMEText(text, 'plain', 'utf-8'))
    smtp = smtplib.SMTP()
    try:
        smtp.connect()
        smtp.sendmail(sender, receivers, msg.as_string())
    finally:
        smtp.quit()
        smtp.close()


def main():
    ...
    cursor = connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cursor.execute("select * from test;")
    ergebnis = cursor.fetchall()

    message = "This is a test e-mail message from test.py:\n\n{}""".format("\n".join(map(str, ergebnis)))
    sendmail("abc@def.com", ["xyz@abc.de"], "testmail", message)

if __name__ == "__main__":
    main()
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

cool danke ja das funktioniert und ergibt sinn. Allerdings wird das ganze ja als Datei angehängt. bekomm ich das auch direkt als "Message" text mit rein? ich vermute stark ich muss hier was ändern? format("\n".join(map(str, ergebnis)))
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Gedankenfehler, funktioniert sehr gut. Nochmal danke
Antworten