Как сделать так, чтобы можно было-бы читать письма каким угодно почтовиком и при этом чтобы вся почта оставалась централизованна? Легко и просто: поставить на своей машине imap сервер. Принцип такой: мы скачиваем новые письма на наш компьютер, передаём их imap серверу, обращаемся почтовиком к нашему серверу.

Для этого нам необходимы следующие программы:

fetchmail

Для начала установим саму программу: apt-get install fetchmail. Конфигурация достаточно проста, приведу лишь мой собственный .fetchmailrc:

set postmaster "shamil"
set bouncemail
set no spambounce
set properties ""

poll pop.popmail.fr with proto POP3 and options no dns
       user 'foo1' there with password 'secret' is 'shamil' here options stripcr
 mda '/usr/bin/procmail -Y -d %T'

poll imap.imapmail.net with proto IMAP
       user 'foo2' there with password 'secret' is 'shamil' here options keep stripcr
 mda '/usr/bin/procmail -Y -d %T'
N.B. mda '/usr/bin/procmail -Y -d %T' означает, что полученное письмо передаётся procmail.

courier-imap

Теперь очередь установки imap сервера. Я выбрал courier-imap, он не требует ни какой особой конфигурации: apt-get install courier-imap. Вот конфиг. файл моей машины:

ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=40
PIDFILE=/var/run/courier/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
AUTHMODULES="authdaemon"
AUTHMODULES_ORIG="authdaemon"
DEBUG_LOGIN=0
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \
				THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"
IMAP_IDLE_TIMEOUT=60
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=1
IMAP_OBSOLETE_CLIENT=0
IMAP_ULIMITD=65536
IMAP_USELOCKS=0
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
OUTBOX=.Outbox
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=YES
Создадим папки, в которой будут хранится письма:
bash$ cd
bash$ maildirmake Maildir
bash$ maildirmake -f Outbox Maildir
bash$ maildirmake -f mbox Maildir
bash$ maildirmake -f Personal Maildir
bash$ maildirmake -f Work Maildir

Теперь ваш INBOX это ~/Maildir, в нем мы создали 4 папки (естественно, можно создать сколько угодно), которые будут доступны в вашем почтовом клиенте как INBOX.Outbox, INBOX.mbox, INBOX.Personal и INBOX.Work.

Как и любой мейл сервер, courier-imap запрашивает login/password для доступа к письмам. Если вы используете конфигурацию по умолчанию, то это будет ваш login/password для входа в систему.

procmail

Что у нас получилось - письма собираются при помощи fetchmail, локальный почтовый ящик мы создали. Но как сделать, чтобы эти письма попадали в Maildir? Этим займётся procmail:

#~/.procmailrc
VERBOSE=yes
LOGNAME=shamil
PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/Maildir      #you'd better make sure it exists
DEFAULT=$MAILDIR/.mbox   #completely optional
#DEFAULT=/var/mail/shamil   #completely optional
LOGFILE=$MAILDIR/.procmail.log


###############################################################################
#			       I hate spam!				      #
###############################################################################

:0:
* ^Subject:.*(flame|sex|love|viagra|loan|cash|money)
/dev/null

###############################################################################
#			       sort mail boxes				      #
###############################################################################

# Primo - fix broken charsets
:0 f
| fix-mime-charset

# Secundo - do the main job

:0:
* ^To:.*@imapmail.net
.Work/

:0:
* ^To:.*@popmail.fr
.Personal/

Принцип простой, мы задаем правила, следуя которым procmail сортирует входящие письма

Последний жест: конфигурация почтового клиента. Пример для mutt:
#~/.muttrc
set editor="vim"
set visual="vim"

set allow_8bit 
set locale=	
set charset="utf-8"

set copy="yes"                   	  
set spoolfile="imap://localhost/"
set folder="imap://localhost/"
set imap_user=yourlogin
set imap_pass=yourpass
set record="=INBOX.Outbox"

set mbox_type=Maildir

#  MTA
set sendmail="/usr/sbin/sendmail -oem -oi"
set envelope_from=yes

mailboxes !
mailboxes =INBOX.mbox
mailboxes =INBOX.Work
mailboxes =INBOX.Personal
mailboxes =INBOX.Outbox

Финальный бонус: как читать на работе письма которые находятся на вашем домашнем компьютере? Если у вас есть постоянный IP адрес, то можно соединятся к домашней машине через ssh и читать консольным клиентом (mutt, pine, gnus, etc.). Можно так же настроить imaps или webmail и читать письма с удалённого компьютера при помощи любимой мозиллы :)

Screenshots: mozilla, mutt

Кстати, часто возникает вопрос - как отправлять письма? Для этого обычно ставят различные MTA, как postfix, sendmail, и т.д. Существует альтернативное и, на мой вгляд более простое решение - поставить ssmtp или esmtp. В чем разница? Обе эти программы лишь передают письма которые вы хотите отправить на удаленную машину, где установлен один из вышеуказанных MTA. Выгода - ноль (ну почти ноль) настроек на вашем компьютере, более безопасное решение.



Shamil
Last modified: Sun Dec 28 12:45:21 CEST 2003