Seite 1 von 1

Emails in ordner verschieben

Verfasst: Dienstag 9. April 2024, 17:39
von coder007
Hallo,
ich würde gerne einen Spamfilter mit Ki bauen und das habe ich auch geschafft aber ich weiß nicht wie ich E-Mails in den Spam Ordner verschieben kann.
Hier ist mein code:

Code: Alles auswählen

import os
from imapclient import IMAPClient
from mltext import classifyText, storeText
from mlmodel import trainModel, checkModel
import requests



API_KEY = "GEHEIM"
imap_server = "GEHEIM"
username = "GEHEIM"
password = "GEHEIM"

# Verbindung zum Server herstellen
with IMAPClient(imap_server) as client:
    client.login(username, password)

    # IMAP-Ordner auswählen (z.B. INBOX)
    client.select_folder('INBOX')

    # Die letzten 10 E-Mails suchen
    messages = client.search('ALL')
    latest_messages = messages[-10:]

    # Die neuesten 10 E-Mails abrufen und den Betreff ausgeben
    for msg_id, data in client.fetch(latest_messages, ['ENVELOPE']).items():
        envelope = data[b'ENVELOPE']
        subject = envelope.subject.decode()
        print(subject)
        demo = classifyText(API_KEY, subject)
        label = demo["class_name"]
        confidence = demo["confidence"]
        print("is '%s' with %d%% confidence" % (label, confidence))
        if label.lower() == "spam":
           client.move(msg_id,'+FLAGS','\\Spam')

Re: Emails in ordner verschieben

Verfasst: Dienstag 9. April 2024, 18:43
von __deets__
Woher kommt denn der Code? ChatGPT?

Re: Emails in ordner verschieben

Verfasst: Dienstag 9. April 2024, 19:26
von coder007
Teilweise ich habe mir von multiplen Websites code Schnipsel zusammen gesucht und 1 mal chat gpt gefragt

Re: Emails in ordner verschieben

Verfasst: Dienstag 9. April 2024, 19:32
von __deets__
So kann man halt nicht programmieren. Du musst schon die Dokumentation der verwandten Module lesen. Da steht drin, wie der move Aufruf auszusehen hat. https://imapclient.readthedocs.io/en/3. ... lient.move

Und da sehe ich schon klare Abweichungen zu deinem Code. Das muss angepasst werden.

Re: Emails in ordner verschieben

Verfasst: Mittwoch 10. April 2024, 07:39
von __blackjack__
@coder007: Anmerkungen zum Quelltext:

`os`, `requests`, `checkModel`, `trainModel`, und `storeText` werden importiert, aber nirgends verwendet.

Konstanten werden per Konvention KOMPLETT_GROSS geschrieben, wie das bei `API_KEY` ja bereits gemacht wird.

`demo` ist ein komischer Name für eine Klassifikation.

Der ``%``-Operator zur Zeichenkettenformatierung wurde schon in Python 2 von der `format()`-Methode auf Zeichenketten abgelöst. Bei aktuellem Python 3 würde man dafür ein f-Zeichenkettenliteral verwenden.

Es wäre effizienter nicht jede Nachricht einzeln in den Spam-Ordner zu verschieben.

Re: Emails in ordner verschieben

Verfasst: Mittwoch 10. April 2024, 15:24
von coder007
`os`, `checkModel`, `trainModel`, und `storeText` werden in den variablen verwendet. Bei `requests` hast du recht das ist unnötig.

Re: Emails in ordner verschieben

Verfasst: Mittwoch 10. April 2024, 15:33
von coder007
__deets__ hat geschrieben: Dienstag 9. April 2024, 19:32 So kann man halt nicht programmieren. Du musst schon die Dokumentation der verwandten Module lesen. Da steht drin, wie der move Aufruf auszusehen hat. https://imapclient.readthedocs.io/en/3. ... lient.move

Und da sehe ich schon klare Abweichungen zu deinem Code. Das muss angepasst werden.
Danke aber daraus wurde ich nicht richtig schlau. Woher bekomme ich den uid der mail? und wie wähle ich den richtigen ordnerpfad? Und ich möchte die email nicht nur kopieren sondern auch die alte löschen

Re: Emails in ordner verschieben

Verfasst: Mittwoch 10. April 2024, 15:47
von __deets__
Hast du den Rest deines Codes gesehen? Und verstanden? Und welche der darin vorkommenden Variablen konnte eine ID einer Nachricht beinhalten? Und die Operation "move" ist nicht die Operation "copy".

Fuer den Ordnerpfad wuerde ich einfach einen Namen angeben. Oder versuchen mit dem imapclient rumzuspielen, um die bestehenden Ordner aufzulisten, und so an die Namen zu kommen.