Neue Mails auf IMAP-Server per Perl anzeigen in ion3/screen

Da ich darum gebeten wurde, doch mal das Perlscript „rauszurücken“, welches ich in ion3 in der Statusbar nutze, werde ich dies nun doch mal machen;)
Installiert werden muss unter Debian libnet-imap-simple-ssl-perl .
Bei diesem Perlmodul handelt es sich um eine Subklasse des Perlmoduls Net::IMAP::Simple, welches aber die SSL-Verschlüsselung beherrscht.
Angesprochen werden die beiden in der gleichen Art, welches sich auch auf cpan.org nachlesen lässt.
Das Script kann auch unter screen genutzt werden, dafür nimmt man die Option backtick und lässt das Script dann, sage ich mal, alle 10 Minuten von screen aufrufen. Ich würde empfehlen es bei 10 Minuten zu belassen, denn alles andere könnte von dem Administratoren des Mailserver als Hammering angesehen werden und ich gehe davon aus, dass man dies nicht möchte.
Ich nutze dieses Script zweimal, einmal für meinen Seraphyn- und einmal für meinen Vollnamen-Account. Abgelegt habe ich es in meinem Dokumente-Ordner, welcher eine verschlüsselte Partition ist, somit brauche ich mir in dem Sinne keine Gedanken wegen den Klartextpasswörtern machen.
Zeile 4-6 sind mit den jeweiligen Daten anzupassen und in den Zeilen 16 und 19 sollte das Sera gegen ein aussagekräftiges Kürzel für den Mailaccount ausgetauscht werden.
Bis Dato werden nur die neuen Mails in der INBOX beachtet, falls Jemand sieve bzw. Regeln nutzt, welche die Mails gleich in die richtigen Ordner verschiebt muss das Script angepasst werden.
[perl]#!/usr/bin/perl -w
use strict;
use Net::IMAP::Simple::SSL;
my $server = ‚DEINIMAPSERVER‘;
my $user = ‚DEINBENUTZERNAME‘;
my $pass = ‚DEINPASSWORT‘;
my $imap = Net::IMAP::Simple::SSL->new($server);
$imap->login($user => $pass) || die "cannot connect";
my $messages = $imap->select(‚INBOX‘);
my $count = 0;
for my $msg (1..$messages) {
$count++ unless $imap->seen($msg);
}
$imap->quit();
if ($count == 0) {
print "Sera: 0";
}
if ($count > 0) {
print "Sera: $count";
}[/perl]

Das ganze wird dann in die Datei $HOME/.ion3/cfg_statusbar.luaper exec eingebunden:

exec = {
 sera={
 program='/home/seraphyn/Dokumente/bin/imapseraphyn',
 retry_delay=6000*1000,
 },
 UND SO WEITER UND SOFORT

In dem Abschnitt template= setzt man dann %exec_sera ein, bzw wenn nicht wie in Zeile 2 sera= genutzt wurde natürlich das à„quivalent. Ich gehe aber davon aus, wer ion3 nutzt, weiss was er tun muss;)

9 Comments

  1. Stimmt.
    Nur im Moment nutze ich es nicht, da es mir unter Debian Squeeze einen Fehler auspuckt den ich noch zu finden versuche:
    Can’t call method „login“ on an undefined value at /home/seraphyn/bin/imapchris line 8.
    Dabei hat sich die Synopsis nicht geändert:
    http://search.cpan.org/dist/Net-IMAP-Simple-SSL/lib/Net/IMAP/Simple/SSL.pm
    Erst hatte ich ein kleines Problem mit IPv6, welches ich aber ausmerzen konnte.
    Vielleicht hast Du einen Tip ;)
    Gruss Chris

  2. Hi,

    statt in einer Schleife alle Mails zu durchlaufen und zu sehen ob die schon gelesen wurden:

    for my $msg (1..$messages) {
    $count++ unless $imap->seen($msg);
    }

    könntest du auch einfach die Zahl der ungelesenen Mails abfragen:

    $count = $imap->unseen()

    das ist erheblich schneller ;-)

    LG,
    Ollo

  3. Net:IMAP::Simple will in diesem Fall:

    $imap-login($user, $pass)

    Das klappt auch mit Simple::SSL, zumindest bei mir, auch wenns in der Dokumentation anders steht?!

    LG,
    Ollo

  4. Habe es mal getestet, macht es nicht.
    Habe mir auch mal die Example unter /usr/share/doc/libnet-imap-simple-perl/examples/imap.pl angeschaut, gehen auch jenen Weg, funktioniert auch nicht LOL
    Ich frage mich warum es die ganze Zeit ging und nun nicht mehr.
    Vor allem warum auch auf der Webseite die Synopsis nicht mehr stimmt.
    Alles sehr komisch.
    Gruss

  5. Nach einem kleinen telnet-Test, habe ich langsam das Gefühl, dass es an Hetzner liegt…
    Ich werde das ganze mal mit einem anderem Mailsrv testen.
    Gruss

  6. Nachdem ich keine Lust hatte mich mit einem nervenden Fehler für das Script von dem Post: Neue Mails auf IMAP-Server per Perl anzeigen in ion3/screen rumzuschlagen, hatte ich das eigentlich Ad Acta gelegt. Eigentlich, bis ein Kommentar Heute von Ollo von

  7. Japp, vernünftige Lösung. Ich meine mal irgendwo in ner Perl-Doku gelesen zu haben dass man den Weg gehen soll.

    Du hast recht, unseen gibt nicht immer korrekte Werte zurück. Komischerweise manchmal die komplette Anzahl der Mails anstatt der ungelesenen. Insofern greife ich jetzt auf deine Methode zurück. Dauert zwar länger, funktioniert aber zuverlässig.

    Danke!!! & LG,
    Ollo

  8. Danke Dir für das anstupsen.
    Sonst hätte ich mich nicht mehr darum gekümmert, weil mein Android mir eh immer Bescheid sagt, wann ich eine Mail habe und somit dann auf mutt wechsle.
    Warum unseen zicken macht verstehe ich nicht ganz, auch versuche ich noch rauszufinden, warum ich ab jetzt extra einen Socket öffnen muss, obwohl Net::IMAP::Simple::SSL dies vorher tat.
    Im changelog steht nichts.
    Sei es changelog.Debian.gz oder changelog.gz
    Egal, nun funzt es

Schreibe einen Kommentar

You have to agree to the comment policy.