Как сделать так, чтобы можно было-бы читать письма каким угодно почтовиком и при этом чтобы вся почта оставалась централизованна? Легко и просто: поставить на своей машине imap сервер. Принцип такой: мы скачиваем новые письма на наш компьютер, передаём их imap серверу, обращаемся почтовиком к нашему серверу.
Для этого нам необходимы следующие программы:Для начала установим саму программу: 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.
Теперь очередь установки 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 для входа в систему.
Что у нас получилось - письма собираются при помощи 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 и читать письма с удалённого компьютера при помощи любимой мозиллы :)
Кстати, часто возникает вопрос - как отправлять письма? Для этого обычно ставят различные MTA, как postfix, sendmail, и т.д. Существует альтернативное и, на мой вгляд более простое решение - поставить ssmtp или esmtp. В чем разница? Обе эти программы лишь передают письма которые вы хотите отправить на удаленную машину, где установлен один из вышеуказанных MTA. Выгода - ноль (ну почти ноль) настроек на вашем компьютере, более безопасное решение.