Mutt Guide

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Ο οδηγός αυτός φιλοδοξεί να σας βοηθήσει να αντικαταστήσετε τον γραφικό σας mail client από μια σειρά παραδοσιακών Unix εργαλείων με επίκεντρο τον Mutt. Προσωπικά μου κίνητρα για την μετάβαση αυτη η περαιτέρω μείωση της χρήσης του ποντικιού, η χρήση ενός καλού editor κειμένου όπως ο Vim και για e-mail, η πρόσβαση στο γραμματοκιβώτιό μου από οπουδήποτε μέσω SSH (όχι, το webmail για πολλούς λόγους δεν είναι λύση), η αποδοτικότερη ταξινόμηση μεγάλου όγκου μηνυμάτων από λίστες ταχυδρομείου. Το κείμενο σίγουρα περιέχει λάθη και με δεδομένο το αρκετά φρέσκο δικό μου setup οι διορθώσεις είναι παραπάνω από ευπρόσδεκτες ;-).

Προγράμματα που θα χρησιμοποιήσουμε

  • Ο Mutt αναφέρθηκε ήδη. Είναι ένας εξαιρετικά εύχρηστος και προσαρμόσιμος ncurses-based Mail User Agent, το πρόγραμμα δηλαδή με το οποίο ερχόμαστε άμεσα σε επαφή.
  • Το Fetchmail θα χρησιμοποιηθεί για την λήψη μηνυμάτων από POP3 λογαριασμούς. Συνήθως προωθεί τα μηνύματα στον τοπικό MTA (Mail Transport Agent, όπως ο Postfix ή ο Sendmail, ο daemon που ακούει συνήθως στη θύρα 25 και μεταβιβάζει την αλληλογραφία μεταξύ διακομιστών). Εδώ όμως θα χρησιμοποιήσουμε απευθείας ως MDA (Mail Delivery Agent) το Procmail.
  • Το Procmail είναι, όπως περιγράφεται στην αντίστοιχη man σελίδα, "mail processor". Θα τον χρησιμοποιήσουμε για την ταξινόμηση των μηνυμάτων σε folders με βάση κάποια φίλτρα.
  • Το ESMTP είναι Non-Relay MTA, δεν λειτουργεί ως daemon αλλά ως client και αναλαμβάνει μόνο την αποστολή μηνυμάτων σε άλλον MTA. Ως ενναλακτική μπορούμε να χρησιμοποιήσουμε έναν πλήρη MTA όπως ο Sendmail ή ο Postfix, λύση που απαιτεί αρκετή εμπειρία (ειδικά τα .cf αρχεία του πρώτου) και αν είμαστε απρόσεκτοι μπορεί να δημιουργήσει κενά ασφαλείας.

Ακολουθούμε πιστά τη Unix φιλοσοφία των πολλών μικρών προγραμμάτων που κάνουν σωστά τη δουλειά τους και συνεργάζονται μεταξύ τους :-). Τα πακέτα που αναφέρονται πιθανότατα βρίσκονται στα repositories της διανομής σας, ενώ και η εγκατάστασή τους από κώδικα δεν είναι δύσκολη.

Fetchmail

Δεν υπάρχει λόγος να τρέχει ως root, ούτε ως daemon. Δημιουργήστε το αρχείο ~/.fetchmailrc με περιεχόμενο παρόμοιο με αυτό:

poll mail.ntua.gr with protocol pop3,
	user el03xyz there is username here,
	with password not_my_phone_number
	mda "/usr/bin/procmail -f fetchmail"

poll popsrv.central.ntua.gr with protocol pop3,
	user el03xyz there is username here,
	with password not_my_phone_number
	mda "/usr/bin/procmail -f fetchmail"

poll pop.gmail.com with protocol pop3,
	user google_user there is username here,
	with password not_my_birthdate
	ssl
	mda "/usr/bin/procmail -f fetchmail"

για τους δύο λογαριασμούς του Πολυτεχνείου και το GMail. Προσέξτε ότι το GMail απαιτεί SSL encryption. Επίσης φροντίστε το αρχείο να μην είναι group και world readable, περιέχει τους κωδικούς σας:

chmod 600 .fetchmailrc

Με την εντολή fetchmail τα μηνύματα θα κατέβουν. Πιθανόν να υπάρχει στο σύστημά σας και το GUI fetchmailconf για τη ρύθμιση του fetchmail. Μπορούμε να χρησιμοποιήσουμε μια cron job για να λαμβάνουμε mail σε χρονικές στιγμές που καθορίζουμε. Εντολή crontab -e και εισάγουμε μια γραμμή της μορφής:

*/10 * * * * fetchmail &>/dev/null

για τη λήψη mail κάθε 10 λεπτά. Υπάρχει η δυνατότητα βέβαια να χρησιμοποιήσουμε τον Mutt και ως POP3/IMAP client και να παρακάμψουμε τελείως αυτή την ενότητα.

Ως MDA καθορίσαμε το procmail, το οποίο και ακολουθεί.

Procmail

Το Procmail θα παραδώσει τα μηνύματα στα mailbox που καθορίζουμε. Θα χρησιμοποιήσουμε ως default το /var/spool/mail/username. Δημιουργούμε το .procmailrc με περιεχόμενο όπως αυτό:

PATH=/bin:/usr/bin
SHELL=/bin/sh

MAILDIR=/home/username/Mail
DEFAULT=/var/spool/mail/username
LOCKFILE=$HOME/.lockmail
LOGFILE=$MAILDIR/procmail.log
VERBOSE=on

:0:
* ^(From|Cc|To):.*linux-greek-users
lgu/

:0:
* ^(From|Cc|To):.*announce.*ntua.gr
ntua-announcements/

Μια "συνταγή" (recipe) ξεκινά με :0 και ακολουθεί ένα δεύτερο : αν θέλουμε ένα ακόμα lockfile για τη συγκεκριμένη συνταγή. Η γραμμή που ξεκινά με * είναι η συνθήκη και η αμέσως επόμενη ο προορισμός. Η πρώτη συνταγή καθορίζει ότι τα μηνύματα που ικανοποιούν τη regular expression

^(From|Cc|To):.*linux-greek-users

-ή στα ελληνικά τα μηνύματα με μια γραμμή που ξεκινά (^) από From, Cc ή To, συνεχίζεται με ":", έναν αυθαίρετο αριθμό χαρακτήρων (.*) και το κείμενο "linux-greek-users"- θα καταλήξουν στον folder $MAILDIR/lgu/ . Προσοχή στο / μετά το lgu, για το procmail σημαίνει ότι πρόκειται για folder με Maildir format (με ένα αρχείο ανά μήνυμα) και όχι mbox (με ένα αρχείο για όλα τα μηνύματα).

Μπορούμε να χρησιμοποιήσουμε πιο σύνθετους κανόνες, pipes σε άλλα προγράμματα και γενικά το μόνο όριο είναι η φαντασία μας.

Το εκτελέσιμο του procmail ίσως και στο δικό σας σύστημα είναι sticky, το οποίο στο setup που περιγράφουμε δεν είναι αναγκαίο:

chmod -s /usr/bin/procmail

αλλά δεν θα μπορείτε (μάλλον) να στείλετε τοπικά mail (σε άλλους χρήστες του συστήματος).

Mutt

Ξεκινήστε με τα μάλλον απαραίτητα στο ~/.muttrc :

# From: field
my_hdr From: el03xyz@mail.ntua.gr (My Name)

set folder = ~/Mail
# keeping the default spoolfile (/var/spool/mail/username)
# read mail from spoolfile will go to mbox
set mbox="~/Mail/inbox"
set move=yes
# default 
set mbox_type=Maildir

# = expands to folder ( ~/Mail )
# mailboxes mutt will check for new mail
mailboxes /var/spool/mail/username =lgu =announcements

# store all outgoing mail to sent
fcc-save-hook . =sent
# save attachments, too
set fcc_attach = yes
set postponed="~/Mail/postponed"

# options for greek support
set charset="greek"
set locale="el_GR"
set send_charset="US-ASCII:ISO-8859-1:ISO-8859-7:UTF-8"

set alternates="el03xyz@mail.ntua.gr|el03xyz@central.ntua.gr|google_user@gmail.com"

Τα υπόλοιπα είναι θέμα γούστου, ενώ μπορείτε να δείτε όλες τις διαθέσιμες επιλογές στην muttrc man page.

Η χρήση του Mutt είναι αρκετά απλή. Συνοπτικά χρησιμοποιείστε:

  • τα vi keys (j,k) ή τα βελάκια για μετακίνηση ανάμεσα στα μηνύματα
  • tab για μετακίνηση στο επόμενο μη διαβασμένο
  • c για μετακίνηση σε άλλο folder (θα σας ζητηθεί το path του, το = είναι συντομογραφία για το ~/Mail)
  • enter για επιλογή μηνύματος (θα το διαβάσετε στον builtin pager αν δεν έχετε καθορίσει κάποιον άλλο)
  • μετακίνηση μια σελίδα κάτω στον pager με space, μια σελίδα πάνω με -, μια γραμμή κάτω με enter, μια γραμμή πάνω με backspace (όπως στον more).
  • οι βασικές επιλογές φαίνονται στη μπάρα πάνω, δεν τις περιγράφω.

Για τη σύνταξη των μηνυμάτων επιλέξτε όποιον editor θέλετε. (μεταξύ των 2 που υπάρχουν). Καθορίστε το με τη μεταβλητή editor στο muttrc ή τη μεταβλητή περιβάλλοντος EDITOR.

Τώρα μάλλον σας φαίνεται βαρετό το Mutt και σκέφτεστε να γυρίσετε στον Thunderbird. Βάλτε λίγο χρώμα στο ~/.muttrc:

# colors
color hdrdefault yellow default
color quoted blue default
color signature yellow default
color indicator brightyellow default
color error red default
color status cyan default
color tree magenta default
color tilde magenta default
color message brightcyan default
color markers brightcyan default
color attachment magenta default
color search black yellow
color underline brightdefault default
# highlight urls and mail addresses
color body cyan default "(ftp|http|https)://[^ ]+"
color body cyan default [-a-z_0-9.]+@[-a-z_0-9.]+

ESMTP

Δεν είπαμε ακόμα πως θα γίνεται η αποστολή των μηνυμάτων, σειρά του ESMTP. Είναι εύκολο στις ρυθμίσεις του. Ας κρατήσουμε το ~/.esmtprc απλό:

hostname = mail.ntua.gr:25
mda = "/usr/bin/procmail -d %T"

Για τα εξερχόμενα μηνύματα χρησιμοποιούμε τον mail.ntua.gr χωρίς authentication, ενώ την τοπική αλληλογραφία την αναλαμβάνει το Procmail. Μπορείτε να χρησιμοποιήσετε πολλαπλούς λογαριασμούς, authentication κλπ., η man σελίδες του esmtp και του esmtprc είναι φίλοι σας. Το ESMTP θα γκρινιάξει αν έχετε permissions χαλαρότερα από 0710 (το δικό μου είναι 600, δεν καταλαβαίνω για πιο λόγο να είναι εκτελέσιμο). Δοκιμάστε αυτό:

echo hello world | esmtp username

και δείτε με το mutt ένα μήνυμα στο spoolfile.

Τα command line options του ESMTP είναι ίδια με το sendmail σε ρόλο client. Μπορείτε δηλαδή να έχετε ένα softlink /usr/sbin/sendmail -> /usr/bin/esmtp και να δουλεύουν σωστά η τοπική αλληλογραφία και τα προγράμματα που έχουν hard-coded το sendmail (πχ. θα έρχεται το output των cron jobs στο mail σας). Δημιουργήστε ένα world-readable /etc/esmtprc με μια γραμμή που περιέχει τον MDA (χωρίς το hostname όπως παραπάνω). Για να στέλνετε μηνύματα από χρήστη σε χρήστη το procmail πρέπει να έχει permissions να γράψει στα mbox άλλων χρηστών (αγνοήστε αυτό που λέω με το sticky παραπάνω).

Εναλλακτικά με το ESMTP, και αν δεν σας ενδιαφέρουν τα τοπικά mail χρησιμοποιείστε κάτι ακόμη απλούστερο, όπως το Python script Putmail. Αν επιδιώκετε απόλυτο έλεγχο στήστε τοπικά το Sendmail ή το Postfix.

Παραπομπές

TODO

  • (Sendmail Configuration)
  • Anti-Spam War
  • PGP