Moin zusammen,
zu Anfang möchte ich mich kurz Vorstellen da dies mein erster Beitrag ist.
Ich bin Johannes und studiere Elektrotechnik mit leider miserablen Programmierkenntnissen. Wir durften bisher C, C++ und C# sowie Java Python und Assembler Programmieren. Alles aber leider nur seeeeehr kurz angeschnitten...
Ich hätte nun eine Frage in welcher ich eure Hilfe benötige:
Ich möchte bei Emaileingang auf einer bestimmten Adresse einen Anruf erhalten. Dafür möchte ich mit imaplib den Server auswerten und einen Ausgang schalten. So weit bin ich auch schon.
Das Programm ruft die Emails ab und gibt mir aus wie viele Emails vorhanden sind. Sofern ungelesene Emails vorhanden sind, wird die grüne LED eingeschaltet, wenn nicht die rote...
Da auf diese Emailadresse sicherlich nicht nur die Alarmemails eingehen werden, würde ich nun zusätzlich gerne nach Betreff und / oder Absender filtern und nur die grüne LED Leuchten lassen, wenn ich ungelesene Emails von entsprechendem Absender bzw. mit entsprechendem Betreff habe. Zusätzlich würde ich die LED gerne nur eine kurze Zeit eingeschaltet lassen und nach einer halben Stunde erneut einschalten lassen.
Die LED soll später durch ein Wählgerät getauscht werden und darüber würde ich gerne bei Emaileingang eine Nachricht erhalten.
Ich habe dazu auch die Suche bemüht, allerdings noch nichts wirklich 100%iges Hilfreiches rausgefunden. Alle Threads sind deutlich älter als 365 Tage, daher dachte ich mach ich mal einen neuen...
Nun zum Code den ich bisher habe... (Ich hoffe ich füge den so richtig ein..):
import time
import board
from imapclient import IMAPClient
from digitalio import DigitalInOut, Direction
HOSTNAME = 'imap.1und1.de'
MAILBOX = 'Inbox'
MAIL_CHECK_FREQ = 30 #alle xx Sekunden auf Emails pruefen
#Zugangsdaten Email
USERNAME = 'LoginName'
PASSWORD = 'LoginPasswd'
NEWMAIL_OFFSET = 0 #my unread messages never goes to zero, use this to override
#Ausgabe Einstellen
green_led = DigitalInOut(board.D18)
red_led = DigitalInOut(board.D23)
green_led.direction = Direction.OUTPUT
red_led.direction = Direction.OUTPUT
def mail_check():
#login auf den Mailserver
server = IMAPClient(HOSTNAME, use_uid=True, ssl=True)
server.login(USERNAME, PASSWORD)
#auswaehlen des Ordners und nach ungelesenen Emails suchen
unseen = server.folder_status(MAILBOX, ['UNSEEN'])
#anzahl der ungelesenen Nachrichten
#ausgeben in der Console um Offset einstellen zu können
newmail_count = (unseen[b'UNSEEN'])
print('%d unseen messages' % newmail_count)
if newmail_count > NEWMAIL_OFFSET:
green_led.value=True
red_led.value=False
else:
green_led.value=False
red_led.value=True
time.sleep(MAIL_CHECK_FREQ)
while True:
mail_check()
Alles anzeigen
Gedacht hatte ich z.B. bei "unseen = server.folder_status..." eine Zeile dazuzuschreiben, welche das "subject" Kontrolliert. Allerdings war dort bisher immer der Fehler, da mir dort der Befehl fehlte...
Bei "newmail_count = (unseen...." mit einem "and" die zweite Bedingung anzufügen...
Habt ihr Ideen?
LG Johannes