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

Debian Lenny : Grafische Benachrichtigung für neue Mails in mutt

Ein X-System ist für mich für ion3 da. Zum surfen, für gimp ( auch SVG-Programme), nxclient, worker und damit hat es sich eigentlich. Nein, ich kann viele Webseiten nicht per w3m und Konsorten nutzen. Nehmen wir als Bsp. Susestudio.
Nun sitze ich nicht dauerhaft vor meinem mutt und starre es an um zu Wissen, wann ich eine Mail bekomme. Das Beep ist nicht wirklich ein Angebot für mich und ich suchte eine Alternative. Die gibt es leider nicht wirklich. Mir kam dann die Idee so etwas zu nutzen wie ich es für mein irssi mache, nur nicht mit popper, sondern per libnotify.
Erinnert mich daran mal die Sache von popper auf libnotify umzuschreiben…

Installiert werden muss das Paket libnotify-bin, ich gehe davon aus, dass mutt und perl installiert und mutt konfiguriert ist.
In die Datei $HOME/.muttrcmuss folgende Zeile eingefügt werden:

set status_format="muttnews  %n %u |"

Für Informationen über das status_format sucht man am besten das Mutt-Manual auf.
Als nächstes wird dieses Perlscript in das Verzeichnis $HOME/bin/ kopiert:

#!/usr/bin/perl -w
use strict;
use warnings;

my $icon = "/home/seraphyn/.icons/nuoveXT.2.2/16x16/apps/redhat-email.png";

if($ARGV[0] >= 1)
{
`notify-send -i $icon 'Mutt-Mail' 'Messages New: $ARGV[0] Unread: $ARGV[1]'`;
}

Das Icon in Zeile 5 muss natürlich nach eigenem Gusto angepasst werden. Die Grösse 16×16 hat sich als passend herausgestellt.
Das war es schon im Ganzen. Da ich mutt ohne lokalen Mailserver einsetze, sprich ich nutze die mutt-internen IMAP- und SMTP-Funktionen, bin ich immer bestens Informiert. Durch mutt-profile nutze ich mehrere Konten, leider wird nur das momentan aktive Konto per libnotify angezeigt, welches ich nicht zwar als störend empfinde, aber schön wäre es trotzdem auch dazu Infos zu bekommen.
Über diese Herausforderung mache ich mir später Gedanken;)

Debian Lenny: Popper, wenn die Konsole GUI spricht inkl. irssi-Script

Popper ist ein Ersatz für kdialog, gdialog, osd_cat und knotify und ist eine nette Hilfe für die Erweiterung eines WMs, wenn wichtige Nachrichten von einem Shellscript oder ähnlichem an die grafische Schnittstelle gesendet werden müssen. Normalerweise nutze ich osd_cat unter ion3, nur muss ich zugeben, ich übersehe bei einer heftigen Administrationsarbeit schon einmal den netten Aufruf, dass ich an einer anderen Stelle gebraucht werde.
Leider ist Popper nicht in den Debian-Repositories vorhanden, kann aber einfach selber kompiliert und dann in das ~/bin/-Verzeichnis gesetzt werden, um es Lokal aufrufen zu können.
Abhängigkeiten für das Kompilieren sind:

  1. Gtk2-devel
  2. Glib2-devel
  3. libnotify-devel

für das Ausführen:

  1. Gtk2
  2. Glib2
  3. libnotify

Nachdem die Abhängigkeiten installiert sind reicht ein einfaches sh buildme.sh und schon hat man die die Datei popper in dem Verzeichnis.
Wer nun das Bild betrachtet bekommt einen kleinen Aha-Effekt, denn den meisten sollte das Programm bekannt sein:
Popper zeigt eine Beispielnachricht
Also habe ich mich gleich mal an die Arbeit gesetzt und eine Benachrichtigung für irssi geschrieben, welche nur den eigenen Nicknamen für öffentliche Nachrichten beachtet und bei privaten Nachrichten eine Meldung ausgibt.
[bash lang=perl ln=y]#!/usr/bin/perl -w
#
# Seraphyn
# This file is released under the GPLv2.
#

use strict;
use vars qw($VERSION %IRSSI);

use Irssi;
$VERSION = ‚1.00‘;
%IRSSI = (
authors => ‚Seraphyn‘,
contact => ‚http://got-tty.org‘,
name => ‚popper‘,
description => ‚For the friends of ion3 and irssi ‚ .
‚Pops up at specific messages which includes your Namewith the popper-app‘,
license => ‚GPL‘,
);

sub popper {
my $msg = shift;

$msg =~ s/“/\“/g;

my $pop_on = Irssi::settings_get_bool(„pop_on“);
if ( ! $pop_on ) {
return;
}

my $cmd = Irssi::settings_get_str( „pop_command“ );

system( „$cmd „$msg“ &“);
}

sub msg_public_handler {
my ( $server, $msg, $nick, $address, $channel) = @_;
my $onick= quotemeta „$server->{nick}“;
my $pat ='(:|,|s)‘; # option…
my @pop_channels = split(/ /, Irssi::settings_get_str(„pop_channels“) );

foreach my $c (@pop_channels) {

if ( $channel eq $c )
{
if( $msg =~ /^$onick/i )
{
popper( „$channel $nick: $msg“ );
last;
}
}
}

}

sub msg_private_handler {
my ( $server, $msg, $nick, $address ) = @_;
popper( „$nick: $msg“ );
}

sub usage {
print „Usage:
/set pop_command
set command to execute on events, examples: popper -l -3 for 3 seconds, -5 for five seconds, see for more Info
/set pop_channels
set whitespace seperated list with channels on which pop_command is executed
(e.g. ‚#irssi #ion‘)
/set pop_on
set whether to pop or not
/popper help
display this help“;
}

sub main {
Irssi::signal_add(„message public“, „msg_public_handler“);
Irssi::signal_add(„message private“, „msg_private_handler“);

Irssi::settings_add_str(„popper“, „pop_channels“, „#EXAMPLE1 #EXAMPLE2“);

Irssi::settings_add_str(„popper“, „pop_command“,
“ popper -l -3″);

Irssi::settings_add_bool(„popper“, „pop_on“, 1);

Irssi::command_bind( „popper“, „usage“, „popper“)
}

main();

Einfach den Sourcetext in das ~/.irssi/scripts/-Verzeichnis als popper.pl abspeichern, ausführbar machen, und mit /script load popper.pl in irssi laden, auch kann scriptassist dazu genutzt werden, um jenes auf autorun zu setzen. Mit /set pop_channels können die Channels getrennt mit einem Leerzeichen angegeben werden ( am besten in Zeile 83 die EXAMPLE-Channels in die eigenen ändern). Für Zeile 86 gelten die typischen popper-Aufrufe.

Weitere Infos wie man Popper behandelt ( Ich als Kind der 70er muss permanent Grinsen, Mann, bin ich Froh, dass ich das Wort nun nicht mehr schreiben muss :D ) findet man auf der verlinkten Webseite.

Achtung bei dem RSS-Feed stimmt nicht, durch bash, der Code, somit bitte von der Seite kopieren.