Совсем неидеальная настройка для dialup машины с динамическим IP и сказочным доменом, ставилась цель настроить и забыть :)
Дистрибутив Debian Etch, пакеты mutt, postfix, procmail и fetctmail ставились без настроек. Если при установке что-то и спрашивалось, соглашался на первый же предложенный вариант.
Mutt будет искать новую почту в каталоге ~/mail, который также будет содержать подкаталоги Read(прочитанные письма), Sent(отправленные письма) и Drafts(черновики).
Файл ~/.muttrc
# ---- language-env DON'T MODIFY THIS LINE!
# Character set to be used.
set charset=utf-8
set send_charset=us-ascii:koi8-r:utf-8
# ---- language-env end DON'T MODIFY THIS LINE!
set folder="~/mail"
set mbox_type="Maildir"
set spoolfile="~/mail/"
set mbox="+Read"
set record="+Sent"
set postponed="+Drafts"
mailboxes +Read +Sent +Drafts
set signature="~/.signature"
set move=yes
macro index c "?" "open a different folder"
macro pager c "?" "open a different folder"
Создаём каталог для почты и назначаем нужные права.
mkdir ~/mail
mkdir ~/mail/new
mkdir ~/mail/cur
mkdir ~/mail/tmp
chmod 0700 -R ~/mail
По мелочи:
Файл ~/.zshrc
# Добавляем
export MAILDIR=$HOME/mail
export VISUAL=vim
export EDITOR=vim
Файл ~/.signature
Моя подпись :)
Пока ничего не работает из-за особенностей локальной доставки, поэтому принимаемся за неё.
Файл ~/.procmailrc
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/
Procmail пока не раскидывает почту по каталогам, это оставлено на будущее.
Файл /etc/postfix/master.cf
# Не трогая остального добавляем следующую строчку
hold unix - - - - - smtp
Файл /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
#=================================
# Моя машина имеет имя rbox.net
myhostname = rbox
mydomain = net
mydestination = rbox.net, localhost.net, localhost
#=================================
# адрес smtp провайдера
relayhost = smtp.mail.ru
mailbox_size_limit = 0
home_mailbox=mail/
mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME
default_transport=hold
defer_transports = hold
transport_maps=hash:/etc/postfix/transport
disable_dns_lookups=yes
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_type = cyrus
smtp_sasl_security_options = noanonymous
Создаём три файлика
Файл /etc/postfix/transport
rbox local:
rbox.net local:
localhost.rbox.net local:
Файл /etc/postfix/generic
локальный_пользователь@rbox имя_ящика@mail.ru
локальный_пользователь@rbox.net имя_ящика@mail.ru
Файл /etc/postfix/sasl_passwd
smtp.mail.ru имя_ящика:пароль_к_ящику
Даём знать Postfix'у о существовании этих файлов:
cd /etc/postfix
postmap generic
postmap transport
postmap sasl_password
/etc/init.d/postfix restart
На данный момент можно без подключения к сети написать письмо самому себе, отправить и получить.
Изменим поведение postfix, чтобы при наличии соединения письма отправлялись немедленно, а не копились в очереди.
Файл /etc/ppp/ip-up.d/postfix
#!/bin/sh -e
# Called when a new interface comes up
# Written by LaMont Jones
# don't bother to restart postfix when lo is configured.
if [ "$IFACE" = "lo" ]; then
exit 0
fi
# If /usr isn't mounted yet, silently bail.
if [ ! -d /usr/lib/postfix ]; then
exit 0
fi
RUNNING=""
# If master is running, force a queue run to unload any mail that is
# hanging around. Yes, sendmail is a symlink...
if [ -f /var/spool/postfix/pid/master.pid ]; then
pid=$(sed 's/ //g' /var/spool/postfix/pid/master.pid)
exe=$(ls -l /proc/$pid/exe 2>/dev/null | sed 's/.* //;s/.*\///')
if [ "X$exe" = "Xmaster" ]; then
RUNNING="y"
fi
fi
# start or reload Postfix as needed
if [ ! -x /sbin/resolvconf ]; then
f=/etc/resolv.conf
if ! cp $f $(postconf -h queue_directory)$f 2>/dev/null; then
exit 0
fi
if [ -n "$RUNNING" ]; then
#===============================================================
# Вот новая строчка
/usr/sbin/postconf -e defer_transports=smtp
/etc/init.d/postfix reload >/dev/null 2>&1
fi
fi
# If master is running, force a queue run to unload any mail that is
# hanging around. Yes, sendmail is a symlink...
if [ -n "$RUNNING" ]; then
if [ -x /usr/sbin/sendmail ]; then
/usr/sbin/sendmail -q >/dev/null 2>&1
fi
fi
Файл /etc/ppp/ip-down.d/postfix
#!/bin/sh -e
# Called when an interface disconnects
# Written by LaMont Jones
# start or reload Postfix as needed
# If /usr isn't mounted yet, silently bail.
if [ ! -d /usr/lib/postfix ]; then
exit 0
fi
RUNNING=""
# If master is running, force a queue run to unload any mail that is
# hanging around. Yes, sendmail is a symlink...
if [ -f /var/spool/postfix/pid/master.pid ]; then
pid=$(sed 's/ //g' /var/spool/postfix/pid/master.pid)
exe=$(ls -l /proc/$pid/exe 2>/dev/null | sed 's/.* //;s/.*\///')
if [ "X$exe" = "Xmaster" ]; then
RUNNING="y"
fi
fi
if [ ! -x /sbin/resolvconf ]; then
f=/etc/resolv.conf
if ! cp $f $(postconf -h queue_directory)$f 2>/dev/null; then
exit 0
fi
#===============================================================
# Вот новая строчка
/usr/sbin/postconf -e defer_transports=hold
if [ -n "$RUNNING" ]; then
/etc/init.d/postfix reload >/dev/null 2>&1
fi
fi
exit 0
Забираем почту с помощью fetchmail.
Файл ~/.fetchmailrc
poll pop3.mail.ru protocol pop3
user "имя_ящика", with password "пароль_к_ящику", is "локальный_пользователь" here;
sslproto=""
Вот и всё. В таком варианте я получаю почту ручками (fetchmail -v), отвечать могу как оффлайн, так и онлайн. Пока я не в сети почта накапливается, при подключении к сети очередь сбрасывается и далее осуществляется немедленная отправка.