espeak neue Mail- Absender und Betreff sagen lassen

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Benutzeravatar
ulliroyal
Beiträge: 64
Registriert: 30.01.2015 00:43:36

espeak neue Mail- Absender und Betreff sagen lassen

Beitrag von ulliroyal » 17.02.2015 13:42:37

Hallo Forum,

seit Tagen versuche ich ein Skript zu realisieren, dass neue imap-emails, Betreff und Absender, mit Debianespeak 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, Debiancheckmail Debianfetchmail Debianmailx und Debianmutt probiert, und jetzt sehe ich den Wald vor Bäumen nicht mehr. :cry:

Benutzeravatar
GregorS
Beiträge: 3181
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: espeak neue Mail- Absender und Betreff sagen lassen

Beitrag von GregorS » 18.02.2015 01:15:42

ulliroyal hat geschrieben:seit Tagen ...
Hättste mal gleich geguckt, was checkmail (oder so) ausspuckt und wie man das so hinbiegt, wie Du das haben willst.

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])

Benutzeravatar
ulliroyal
Beiträge: 64
Registriert: 30.01.2015 00:43:36

Re: espeak neue Mail- Absender und Betreff sagen lassen

Beitrag von ulliroyal » 18.02.2015 12:08:43

Danke, Gregor, aber Debiancheckmail 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:

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)
oder dass ein blutiger Python Laie wie ich auch nachvollziehen kann, wo espeak steckt:

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) 
Jetzt muss ich „nur noch“ Absender und Betreff neuer mails python-identifizieren,
und sagen lassen.

Benutzeravatar
GregorS
Beiträge: 3181
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: espeak neue Mail- Absender und Betreff sagen lassen

Beitrag von GregorS » 18.02.2015 20:09:46

ulliroyal hat geschrieben:Debiancheckmail z. B. kann kein SSL ...
Ich habe Deine Frage wohl faslch verstanden.

Gruß

Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

Benutzeravatar
ulliroyal
Beiträge: 64
Registriert: 30.01.2015 00:43:36

Re: espeak neue Mail- Absender und Betreff sagen lassen

Beitrag von ulliroyal » 19.02.2015 00:18:10

Ich komme voran…
…mit der Hilfe eines bekannten Meta-Crawlers :wink:
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)
Vielleicht weiß ja jemand, wie man diese Sonderzeichen elegant rausfiltern kann, oder eine bessere Herangehensweise.

Antworten