Hallo Forum,
seit Tagen versuche ich ein Skript zu realisieren, dass neue imap-emails, Betreff und Absender, mit espeak vorliest, um gleich zu wissen, ob es sich um un/wichtige Mails handelt.
Am besten über ein bash-script, weil ich mich damit wenigstens ein bisschen auskenne.
Ganz einfach dachte ich ..
aber bevor ich frustriert scheitere, wäre ich für den eine oder anderen fundierten Tipp dankbar, denn das kann doch nicht so schwer sein!!
Ich hab gegoogelt, ge-perl-t, checkmail fetchmail mailx und mutt probiert, und jetzt sehe ich den Wald vor Bäumen nicht mehr.
espeak neue Mail- Absender und Betreff sagen lassen
Re: espeak neue Mail- Absender und Betreff sagen lassen
Hättste mal gleich geguckt, was checkmail (oder so) ausspuckt und wie man das so hinbiegt, wie Du das haben willst.ulliroyal hat geschrieben:seit Tagen ...
Wenn Du das hast, nimmst Du irgendeinen Sprachsynthesizer und gibst dem das Ergebnis zum Vorlesen.
Das ist bestimmt nicht schwer.
H'TH
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: espeak neue Mail- Absender und Betreff sagen lassen
Danke, Gregor, aber checkmail z. B. kann kein SSL, vgl.
Irgendwas ging immer nicht.
Im Moment kann dieses python-Script immer hin schon was über meine emails sagen, nämlich wie viel ungelesene ich habe:
oder dass ein blutiger Python Laie wie ich auch nachvollziehen kann, wo espeak steckt:
Jetzt muss ich „nur noch“ Absender und Betreff neuer mails python-identifizieren,
und sagen lassen.
Irgendwas ging immer nicht.
Im Moment kann dieses python-Script immer hin schon was über meine emails sagen, nämlich wie viel ungelesene ich habe:
Code: Alles auswählen
#!/usr/bin/env python
import imaplib
import subprocess
im = imaplib.IMAP4_SSL("imap.strato.de")
im.login("ich@du.de", "geheim")
im.select("INBOX")
mails = len(im.search(None, 'UNSEEN')[1][0].split(' '))
if mails:
print 'Du hast %d ungelesene Mails' % mails
im.close()
im.logout()
text = '"du hast %d neue Mails"'% mails
subprocess.call('echo '+text+'|festival --tts', shell=True)
Code: Alles auswählen
#!/usr/bin/env python
import subprocess
def execute_unix(inputcommand):
p = subprocess.Popen(inputcommand, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
return output
a = "Hallo, Debianforum"
# speak aloud
d = 'espeak -vde -k20 -s 120 --punct="<characters>" "%s" 2>>/dev/null' % a
execute_unix(d)
und sagen lassen.
Re: espeak neue Mail- Absender und Betreff sagen lassen
Ich habe Deine Frage wohl faslch verstanden.ulliroyal hat geschrieben:checkmail z. B. kann kein SSL ...
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: espeak neue Mail- Absender und Betreff sagen lassen
Ich komme voran…
…mit der Hilfe eines bekannten Meta-Crawlers
Dieses Python-Script sagt die Betreffzeile, wenn sie keine Sonderzeichen wie [] oder " enthält, also bei [debianforum.de] zum Beispiel streikt espeak. Später werde ich noch die mailadresse mit dem getpass modul verstecken.
Vielleicht weiß ja jemand, wie man diese Sonderzeichen elegant rausfiltern kann, oder eine bessere Herangehensweise.
…mit der Hilfe eines bekannten Meta-Crawlers
Dieses Python-Script sagt die Betreffzeile, wenn sie keine Sonderzeichen wie [] oder " enthält, also bei [debianforum.de] zum Beispiel streikt espeak. Später werde ich noch die mailadresse mit dem getpass modul verstecken.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import imaplib
import email
import email.Header
from email.header import decode_header
import sys
import subprocess
im = imaplib.IMAP4_SSL("imap.strato.de")
im.login("ich@du.de", "geheim")
im.select('INBOX', readonly=True) #readonly fuer die Testphase
typ, new = im.search(None, "UNSEEN")
if (new) ==[None]:
print ("Nix Neues");sys.exit()
if (new) !=[None]:
new = new[0].split()
if (len(new) > 0):
res = list()
for msg in new:
typ, data = im.fetch(msg, '(BODY[HEADER.FIELDS (SUBJECT)])') # FROM, DATE, etc
data = data[0][1].strip()
decoded = decode_header(data[9:])[0] # "Subject: " is 9 characters long
text = decoded[0].replace("\r\n", "")
if (decoded[1] != None):
text = unicode(text, decoded[1])
text = text[:30].strip() # Cut off first 30 characters from subject
res.append(text.encode('utf-8'))
# print '\n '.join(res)
print (res)
def execute_unix(inputcommand):
p = subprocess.Popen(inputcommand, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
return output
a = res
print a
# espeak
d = 'espeak -vde -k20 -s 120 --punct="<characters>" "%s" 2>>/dev/null' % a
execute_unix(d)