Empfangen E-Mail an Telegram 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.
Nurmink1991
User
Beiträge: 1
Registriert: Samstag 27. Januar 2018, 19:27

Empfangen E-Mail an Telegram versenden

Beitragvon Nurmink1991 » Sonntag 28. Januar 2018, 17:21

Hallo ich habe ein Script geschrieben das mir empfangen Emails automatisch an Telegram weiterschicken soll. Das Problem was ich habe ist das es mir den E-Mail Inhalt nicht mit verschickt sondern nur den Betreff, vielleicht hat von euch jemand eine Lösung.

  1. import imaplib
  2. import time
  3. import telepot
  4. import datetime
  5. import os
  6. import email
  7.  
  8. mail = imaplib.IMAP4_SSL('imap.gmail.com')
  9. mail.login('email-adresse','passwort')
  10. mail.list()
  11.  
  12. def handle(msg):
  13.     chat_id = msg['chat']['id']
  14.     command = msg['text']
  15.     bot.sendMassage(chat_id, str(message))
  16.    
  17.  
  18. while 1:
  19.    
  20.     mail.select("inbox")
  21.    
  22.     result, data = mail.search(None, "UNSEEN")
  23.    
  24.     ids = data[0]
  25.    
  26.     id_list = ids.split()
  27.    
  28.     if (id_list):
  29.        
  30.         latest_email_id = id_list[-1]
  31.        
  32.         result, data = mail.fetch(latest_email_id, "(RFC822)")
  33.        
  34.         raw_email = data[0][1]
  35.        
  36.         email_message = email.message_from_string(raw_email.decode('utf-8'))
  37.        
  38.         print(email_message['Subject'])
  39.        
  40.         TOKEN ='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
  41.                    
  42.         bot = telepot.Bot(TOKEN)
  43.  
  44.         chat_id = 'XXXXXXXXX'
  45.        
  46.         message_sub = email_message['Subject']
  47.        
  48.         message_body = email_message['Body']
  49.  
  50.         bot.sendMessage(chat_id, str(message_sub))
  51.        
  52.         bot.sendMessage(chat_id, str(message_body))
  53.  
  54. else:
  55.         time.sleep(20)
Benutzeravatar
sls
User
Beiträge: 42
Registriert: Mittwoch 13. Mai 2015, 23:52

Re: Empfangen E-Mail an Telegram versenden

Beitragvon sls » Montag 29. Januar 2018, 19:45

Ist das oben dein vollständiger Code?

Was mir beim drüber fliegen aufgefallen ist:

- Zeile12: handle() wird nie aufgerufen, ist also erstmal sinnlos
- Zeile18: ich würde evtl. while True verwenden, du hast innerhalb der Schleife keine Abbruchbedingung. Generell gibt es in deinem Skript nichts, was Fehler / Ausnahmen irgendwie abfangen oder behandeln würde, es würde dann jedes Mal gnadenlos auf die Nase fallen.
- Zeile40: da 'TOKEN' eine Konstante sein soll, wird diese immer vor Funktionen, Klassen usw. ziemlich weit oben im Skript gesetzt, siehe dazu PEP8
- Zeile44: das selbe Spiel wie 'TOKEN', warum wird 'chat_id' plötzlich klein geschrieben? Soll das aus der Verarbeitung des aktuellen Durchlaufes heraus geschehen, müsste das IMO ja anders aussehen
- Zeile48: um den Inhalt aus der E-Mail zu entnehmen, gäbe es eigentlich die Methode 'get_payload()', ich würde an deiner Stelle mal debuggen, was Python überhaupt aus 'Body' herausholt und in die Variable legt
- Zeile54: das else ist nicht eingerückt, hier wird der Interpreter spätestens auf die Nase fallen

Ich würde für o.g. Szenario den Intervall von 20 Sekunden btw überdenken. E-Mails sollten nicht im Sekundentakt abgerufen oder gar empfangen werden, ich würde den obigen Code in eine Funktion stecken und dafür einen Task Scheduler respektive Cronjob einrichten (alle 10 - 15 Minuten o,ä.) - das schont die CPU.
With great processing power comes great responsibility.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Majestic-12 [Bot]