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.
Antworten
Nurmink1991
User
Beiträge: 1
Registriert: Samstag 27. Januar 2018, 19:27

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)
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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.
When we say computer, we mean the electronic computer.
Antworten