tingel
Goto Top

Mailfiltern

Hallo,
ich würde gern folgendes unter Linux auf Konsolenebene realisieren:

- automatisches Abholen der Mails alle X Minuten per IMAP
- die Mails filtern nach:
- bestimmter Absender
- bestimmter Betreff ( bzw. bestimmte Zeichenkette im Betreff)
- wenn beide Filter zutreffen, den Mailinhalt in eine bestimmte Text-Datei speichern und den etwaigen Anhang ebenfalls in den gleichen Ordner mit einem bestimmten Dateinamen speichern und einen weiteren Befehl ausführen
- wenn nur ein Filter bzw keiner zutrifft, die Mail weiterleiten

Hab mir schon die Software Mutt angeschaut, aber das ist ja an sich kein Mailfilter.
Gibt es etwas, was dies in einer Software vereint?

Content-Key: 285605

Url: https://administrator.de/contentid/285605

Printed on: April 19, 2024 at 15:04 o'clock

Mitglied: 114757
114757 Oct 15, 2015 at 06:28:27 (UTC)
Goto Top
Moin tingel,
schau mal hier rein:
Linux: Automatisiert Posteingang checken und Skript ausführen
Mit minimalen Anpassungen schon das was du suchst.

Gruß jodel32
Member: tingel
tingel Oct 15, 2015 at 06:40:58 (UTC)
Goto Top
Vielen Dank.
Ich werd mich mal da mal durcharbeiten und dann wieder melden.
Member: tingel
tingel Oct 15, 2015 at 07:17:08 (UTC)
Goto Top
Habe jetzt mal schnell etwas gebastelt.
Stimmt das so?

#!/usr/bin/python
import imaplib
import email 
# ----------------------------
SERVER = "imap.domain.de"  
USERNAME = "MaxMuster"  
PASSWORD = "Geheim"  
# -----------------------------
conn = imaplib.IMAP4_SSL(SERVER)
conn.login(USERNAME,PASSWORD)
# Inbox selektieren 
typ, data = conn.select('INBOX')  
# Nur ungelesene Mails mit einem bestimmten Betreff und Absender filtern und in einer Liste speichern 
typ, [msg_ids] = conn.uid('search',None,'(UNSEEN SUBJECT "testmail", FROM "sender@domain.com")')  

if msg_ids:
  for id in msg_ids.split():
    #print id
    typ,mail = conn.uid('fetch',id,'(RFC822)')  
    msg = email.message_from_string(mail[1])
    subject = msg['subject']  
    # neue Datei erstellen
    file = open('latest-mail.txt','w')  
    file.write("msg")  
    file.close()
    # Wenn Anhang vorhanden, in Datei speichern
    for part in msg.walk():
    if part.get('Content-Disposition').startswith('attach') or 'filename' in part.get('Content-  Disposition'):  
    {
    filename = part.get_filename()
    data = part.get_payload(decode=True)
    #Anhang umbenennen
    newname=fname.replace("filename","latest-attachment.pdf")  
    }

    # externen Befehl aufrufen...

conn.close()
conn.logout()
Member: Lochkartenstanzer
Lochkartenstanzer Oct 15, 2015 updated at 07:22:00 (UTC)
Goto Top
Moin,

Das machst Du normalerweise mit dem lokalen delivery-agent (procmail, deliver, etc.) Du kannst mit fetchmail Deine Mails holen udn dann mit deliver, procmail oder was Du sonst benutzen willst sortieren lassen. Hier findest Du ein paar Beispiele].

lks

PS: Ich benutze Sieve um meine Mails vorzusortieren. face-smile
Mitglied: 114757
114757 Oct 15, 2015 updated at 07:43:37 (UTC)
Goto Top
Zitat von @tingel:
Habe jetzt mal schnell etwas gebastelt.
Stimmt das so?
Probiers doch aus ...
Member: tingel
tingel Oct 15, 2015 at 09:21:25 (UTC)
Goto Top
@jodel: Geht so nicht (nur zur Info)

Was ist nun die bessere/zuverlässigere Methode?
Mitglied: 114757
114757 Oct 15, 2015 updated at 09:47:15 (UTC)
Goto Top
Zitat von @tingel:
@jodel: Geht so nicht (nur zur Info)
War mir klar face-smile
Was ist nun die bessere/zuverlässigere Methode?
Phyton lernen, oder Links von LKS lesen ...
Member: tingel
tingel Oct 15, 2015 at 10:02:42 (UTC)
Goto Top
Ja, das ist mir klar.

Aber es gibt doch sicherlich Erfahrungswerte, welche Methode zuverlässiger/schneller ist.
Member: Lochkartenstanzer
Lochkartenstanzer Oct 15, 2015 at 10:06:40 (UTC)
Goto Top
Zitat von @tingel:

Aber es gibt doch sicherlich Erfahrungswerte, welche Methode zuverlässiger/schneller ist.

Als die sieve-methode funktioniert sehr zuverlässig:

  • per fetchmail oder smtp die Mail lokal einkippen
  • und von sieve sortieren lassen.

Die PHP-Method benötige ich nicht, außerdem sprechen ich kaum PHP udn nutze es daher nicht.

Was meinst Du mit schneller?

lks
Member: tingel
tingel Oct 15, 2015 at 12:36:33 (UTC)
Goto Top
Folgendes wär mal denke ich schon halbwegs das, was ich suche.
:0
* ^From.*name@domain.com
* ^Subject.*Titel
| formail -I -f "from"  >> /home/user/latest-mail.txt  

$HOME/rename.sh

:0
 * ! From:.*name@domain.com
 * ! Subject:.*Titel
| formail -k -X "From:" \  
-I "To: newadress@domain.com" -X "To:" \  
-I "Subject: Forwarded" -X "Subject:" \  
| $SENDMAIL $SENDMAILFLAGS -t


Sprich:
Wenn Absender und Betreff zutreffen, dann wird der Bodytext in /home/user/latest-mail.txt gespeichert und HOME/rename.sh ausgeführt

Wenn dies nicht zutrifft, wird die Mail an newadress@domain.com weitergeleitet.

Würde das stimmen?
Kann es noch nicht testen.

Wie würde das mit dem Anhang gehen, dass wenn der Anhang eine PDF-Datei ist, diese PDF immer unter dem gleichen Namen abspeichert und die alte PDF löscht?
Member: Lochkartenstanzer
Lochkartenstanzer Oct 15, 2015 updated at 12:44:02 (UTC)
Goto Top
Zitat von @tingel:

Sprich:
Wenn Absender und Betreff zutreffen, dann wird der Bodytext in /home/user/latest-mail.txt gespeichert und HOME/rename.sh ausgeführt

Wenn dies nicht zutrifft, wird die Mail an newadress@domain.com weitergeleitet.

Würde das stimmen?
Kann es noch nicht testen.

So nach dem ersten drüberfliegen habe ich nichts bemerkt, was dagegenspricht.


Wie würde das mit dem Anhang gehen, dass wenn der Anhang eine PDF-Datei ist, diese PDF immer unter dem gleichen Namen abspeichert und die alte PDF löscht?

Schau Dir mal munpack an.

lks
Member: tingel
tingel Oct 16, 2015 at 09:58:08 (UTC)
Goto Top
Wäre jemand so nett und kann mir sagen, wie das mit den Anhängen geht?
Alle Anlagen extrahieren geht, aber mein Vorhaben bekomm ich nicht hin.
Member: tingel
tingel Oct 21, 2015 at 14:53:56 (UTC)
Goto Top
Hallo,
kann mir keiner helfen? Bekomm es trotz des Studierens vieler Artikel nicht zum laufen.