Seite 1 von 1

Empfangen E-Mail an Telegram versenden

Verfasst: Sonntag 28. Januar 2018, 17:21
von Nurmink1991
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.

Code: Alles auswählen

import imaplib
import time
import telepot
import datetime
import os
import email

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('email-adresse','passwort')
mail.list()

def handle(msg):
    chat_id = msg['chat']['id']
    command = msg['text']
    bot.sendMassage(chat_id, str(message))
    

while 1:
    
    mail.select("inbox")
    
    result, data = mail.search(None, "UNSEEN") 
    
    ids = data[0]
    
    id_list = ids.split()
    
    if (id_list):
        
        latest_email_id = id_list[-1] 
        
        result, data = mail.fetch(latest_email_id, "(RFC822)")
        
        raw_email = data[0][1] 
        
        email_message = email.message_from_string(raw_email.decode('utf-8'))
        
        print(email_message['Subject']) 
        
        TOKEN ='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' 
                    
        bot = telepot.Bot(TOKEN)

        chat_id = 'XXXXXXXXX' 
        
        message_sub = email_message['Subject']
        
        message_body = email_message['Body'] 

        bot.sendMessage(chat_id, str(message_sub)) 
        
        bot.sendMessage(chat_id, str(message_body))

else:
        time.sleep(20)

Re: Empfangen E-Mail an Telegram versenden

Verfasst: Montag 29. Januar 2018, 19:45
von sls
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.