вторник, 18 января 2011 г.

Отправка e-mail сообщений на несколько smtp-серверов с помощью masqmail и msmtp

Я придерживаюсь мнения, что провайдер должен предоставлять почтовый relay-сервер для корреспонденции своих клиентов. Однако встречаются провайдеры, у которых на этот счет другое мнение (один из таких - Укртелеком). С другой стороны, большинство бесплатных почтовых серверов принимают почту по smtp (с указанием имени и пароля пользователя). Но так как к моменту подключения ноутбука к сети интернет, в очереди будут сообщения написанные с нескольких почтовых аккаунтов, то, соответственно, потребуется отправка через несколько smtp-серверов. С этой задачей хорошо справляется msmtp. Чтобы добавить такую возможность к masqmail, следует написать route-файл следующего вида:

sudo cat > /etc/masqmail/route.utel-unlim
# mail_host="relay.ukrpost.ua"
protocol="pipe"
pipe="/usr/bin/msmtp -f ${return_path} -- ${rcpt}"
^C

Так как будет использоваться общесистемный конфиг msmtp, то потребуется создать (или скопировать из домашнего каталога) файл /etc/msmtprc с нужными настройками.

см. также

понедельник, 17 января 2011 г.

Автоматическая отправка почты на комьютере без постоянного подключения к интернет (masqmail, procmail)

Данный метод отправки почты лучше всего подойдет для компьютеров, работа за которыми производится под несколькими учетными записями, и которые не имеют постоянного подключения к сети интернет, а подключаются к различным провайдерам лишь периодически (например через ppp). В таком случае, после отправки сообщения пользователем, если подключение к интернет активно, оно будет отправлено незамедлительно, в противном случае оно попадет в очередь сообщений, а затем, при активации подключения, будет передано почтовому серверу провайдера (настройки подключения к серверу указываются отдельно для каждого провайдера).
За прием и обработку очереди сообщений отвечает почтовый сервер masqmail, который был создан именно для таких случаев. В debian начальная настройка производится при установке этого пакета (в дальнейшем его можно повторно перенастроить выполнив команду dpkg-reconfigure masqmail). Часть опций, отвечающих за интеграцию в систему debian записывается в файл /etc/default/masqmail:

$ cat /etc/default/masqmail
#
# better use 'dpkg-reconfigure masqmail'
# instead of editing by hand
#
INIT_SMTP_DAEMON="false"
INIT_QUEUE_DAEMON="false"
INIT_FETCH_DAEMON="false"
#
QUEUE_DAEMON_IVAL="-q10m"
FETCH_DAEMON_IVAL="-go5m"
#
IPUP_RUNQUEUE="true"
IPUP_FETCH="false"
IFUP_IFACES="all"


В моем случае при старте системы smtp-демон не запускается (стартует из inetd при запросе), получение почты с других серверов также отключено (для этих целей используется fetchmail). Обработка очереди производится при поднятии любого интерфейса (отрабатывают скрипты, установленные в /etc/network/if-up.d/ и /etc/ppp/ip-up.d/).
Главный конфиг masqmail выглядит так:

$ cat /etc/masqmail/masqmail.conf
### BEGIN DEBCONF SECTION
# Do not edit within this region if you want your changes to be preserved by
# debconf. Instead, make changes after the "### END DEBCONF SECTION" line.
host_name="kirill-u100"
local_hosts="localhost;kirill-u100;localhost.localdomain"
local_nets=""
listen_addresses="localhost:25"
spool_dir="/var/spool/masqmail"
mail_dir="/var/mail"
log_dir="/var/log/masqmail"
do_queue=false
use_syslog=false
online_detect=file
online_file="/var/run/masqmail-route"
mbox_default=mda
mda="/usr/bin/procmail -Y -d ${rcpt_local}"
alias_file=/etc/aliases
alias_local_caseless="false"
### END DEBCONF SECTION
#
# include the locations of your route and get configurations here.
# Examples:
# online_routes.default = "/etc/masqmail/default.route"
# online_gets.default = "/etc/masqmail/default.get"
# You can have more of those, with '.default' replaced with other
# names. See man 8 masqmail.conf.
#

online_routes.kyivstar-xl = "/etc/masqmail/route.kyivstar-xl"
online_routes.utel-unlim = "/etc/masqmail/route.utel-unlim"


Файлы настроек для передачи почты разным провайдерам перечислены в конце файла (строки вида online_routes.<provider_name> = <config_file>). Где <provider_name> устанавливается опцией ipparam при запуске ppp (в соответствующем файле из /etc/ppp/peers/).

Простейший пример одного из таких файлов:

$ sudo cat /etc/masqmail/route.kyivstar-xl
mail_host="relay.kyivstar.net"


Запуск masqmail из inetd производится следующим образом:

$ cat /etc/inetd.conf | grep masqmail
127.0.0.1:25 stream tcp nowait mail /usr/sbin/masqmail masqmail -bd -q -bs

см. также:

четверг, 13 января 2011 г.

Автоматическое получение почты на компьютере без постоянного подключения к интернет (debian, fetchmail, procmail)

см также:

Часть 2 - общесистемное получение почты


Для автоматического получения почты с помощью fetchmail необходимо изменить несколько конфигурационных файлов.
$ vi /etc/default/fetchmail
указать START_DAEMON=yes

Создать общесистемный конфигурационный файл для fetchmail (его можно скопировать из каталога с примерами):
$ sudo cp /usr/share/doc/fetchmail/examples/fetchmailrc.example /etc/fetchmailrc

Установить владельца и разумные права доступа к конфигурационному файлу с паролями:
$ sudo chown fetchmail:root /etc/fetchmailrc
$ sudo chmod 0600 /etc/fetchmailrc

Добавить в этот конфиг правила приема почты из всех почтовых ящиков для всех пользователей (пример полного конфига выглядит так):
$ sudo cat /etc/fetchmailrc

# /etc/fetchmailrc for system-wide daemon mode
# This file must be chmod 0600, owner fetchmail

set daemon 600
set no bouncemail
defaults:
antispam -1
batchlimit 100

poll freemail.ukr.net with proto POP3
user 'r*******@ukr.net' there with password '********' is 'reel' here options keep
mda 'procmail -d %T'
user 'm*********@ukr.net' there with password '********' is 'reel' here options keep
mda 'procmail -d %T'

poll imap.gmail.com with proto IMAP
user 'kirill.zabarniuk@gmail.com' there with password '********' is 'reel' here options keep ssl
mda 'procmail -d %T'

Основное отличие от правил, находящихся в ~/.fetchmailrc - это команда запуска mda 'procmail -d %T'. Ключ -d переключает procmail в режим доставки с правами получателя и с использьзованием конфига из его домашнего каталога (имя получателя будет подставлено вместо переменной %T).

На данный момент fetchmail будет запускаться при старте системы в режиме демона и периодически проверять доступность почтовых серверов. Можно перенастроить его так, чтобы демон запускался при поднятии сетевого интерфейса и завершал свою работу при пропадании сети. Инструкции можно найти в /usr/share/doc/fetchmail/README.Debian.gz (описаны шаги только для отслеживания состояния интерфейсов ppp, без учета возможности подключения через eth; возможно поэтому там же говорится что такой режим работы fetchmail особых преимуществ не имеет :)).

среда, 12 января 2011 г.

Доставка и чтение почты: fetchmail, procmail, kmail

До недавнего момента за доставку (и отправку) почты, при подключении ноутбука к интернет, у меня отвечал masqmail. И, если я правильно ошибаюсь, в новых версиях этой программы возможность доставки решили выпилить, и порекомендовали для этих целей воспользоваться специализированными утилитами. Я решил не дожидаться момента, когда в репозиториях debian-а появится новый masqmail, и сразу перейти на рекомендуемый способ получения почты.
Среди найденного списка программ ($ apt-cache search fetch mail) наиболее подходящими оказались getmail4 и fetchmail. В итоге установил старый добрый fetchmail, несмотря на то что питоновский getmail4 позиционируется как более простой, и даже поддерживает Maildir из коробки.
Итак почту я храню в ящике формата maildir:

~/Mail/
 drafts/
 inbox/
  cur/
  new/
  tmp/
 outbox/
 sent-mail/
 templates/
 trash/

За обработку полученной корреспонденции (распихивание её по ящикам) будет отвечать procmail (в качестве альтернативы можно выбрать maildrop, как рекомендуется в man fetchmail или другой mda).

Часть 1 - получение почты вручную от имени пользователя


Создаем простейший конфигурационный файл для procmail (слэш в конце имени ящика указывает на то, что это ящик maildir):

$ cat > ~/.procmailrc
MAILDIR=$HOME/Mail/

:0
inbox/
^C

В результате вся обрабатываемая почта будет складываться в каталог inbox/.
Конфиг для fetchmail можно создать при помощи утилиты fetchmailconf; вот итог её работы, подходящий под мои требования:

$ cat > ~/.fetchmailrc
# Configuration created Wed Jan 12 11:10:56 2011 by fetchmailconf 1.57
set postmaster "reel"
set bouncemail
set no spambounce
set softbounce
set properties ""
set invisible

poll freemail.ukr.net with proto POP3
 user 'r*******@ukr.net' there with password '**********' is 'reel' here options keep stripcr
 mda 'procmail'
 user 'm*******@ukr.net' there with password '**********' is 'reel' here options keep
 mda 'procmail'

poll imap.gmail.com with proto IMAP
 user 'kirill.zabarniuk@gmail.com' there with password '**********' is 'reel' here options keep ssl
 mda 'procmail'
^C

При запуске, fetchmail будет получать почту из двух почтовых ящиков на сервере ukr.net (по протоколу pop3), и из одного ящика на gmail (по протоколу imap). Копии всех сообщений будут оставаться на сервере, а сами сообщения будут передаваться для дальнейшей обработки procmail-у.
Имеет смысл написать пару сообщений самому себе и проверить как это работает:

$ fetchmail
1 сообщение (1 просмотрено) для r*******@ukr.net на freemail.ukr.net (1974 октетов).
пропускается сообщение r*******@ukr.net@new.ukr.net:1 не очищено
1 сообщение (1 просмотрено) для m*********@ukr.net на freemail.ukr.net (1144 октетов).
пропускается сообщение m*********@ukr.net@new.ukr.net:1 не очищено
1 сообщение для kirill.zabarniuk@gmail.com на imap.gmail.com.
считывается сообщение kirill.zabarniuk@gmail.com@wy-in-f109.1e100.net:1 из 1 (1443 октетов в заголовке) (513 октетов в теле) не очищено

Почту я читаю с матом (mutt), но иногда пользуюсь kmail. Обычно kmail сам находит каталоги с почтой пользователя при первом запуске. Но если этого не произошло, и он решил заныкать сообщения у себя (в каталоге по умолчанию ~/.kde/share/apps/kmail/Mail/), то можно попросить его изменить путь к этому каталогу (http://kmail.kde.org/manual/faq.html#id2792815, http://forum.kde.org/viewtopic.php?f=20&t=84335#p140087):

$ kwriteconfig --file kmailrc --group General --key folders $HOME/Mail

см также Автоматическое получение почты на компьютере без постоянного подключения к интернет

вторник, 11 января 2011 г.

Настройка msmtp для отправки сообщений через несколько серверов (ukr.net, gmail.com)

Выкладываю рабочий конфиг с настройками msmtp (он не захотел с пол-пинка отправлять почту через ukr.net, а в инете готовых решений не обнаружилось):

$ cat ~/.msmtprc
defaults
syslog on

account r*******_at_ukr.net
from r*******@ukr.net
host smtp.ukr.net
protocol smtp
auth on
tls on
tls_starttls off
tls_certcheck off
port 465
user r*******@ukr.net
password **********

account m*********_at_ukr.net
from m*********@ukr.net
host smtp.ukr.net
protocol smtp
auth on
tls on
tls_starttls off
tls_certcheck off
port 465
user m*********@ukr.net
password **********

account kirill.zabarniuk_at_gmail.com
from kirill.zabarniuk@gmail.com
host smtp.gmail.com
protocol smtp
auth on
tls on
tls_starttls on
tls_certcheck off
port 587
user kirill.zabarniuk@gmail.com
password ***********

account default
host localhost
port 25
auto_from on
maildomain localhost


Подружить msmtp с ukr.net оказалось просто, ключевое слово: tls_starttls off.

понедельник, 10 января 2011 г.

Просмотр html-содержимого в mutt и правильная кодировка

Есть такой, очень функциональный текстовый браузер, как w3m, который, кроме всего прочего, умеет отображать картинки. Причем не только во фрэймбуффере, но и в окне терминала (в debian нужно установить пакет w3m-img):




Так вот, в debian-е, если этот пакет установлен, mutt будет использовать его при отображении html-содержимого в e-mail сообщениях. Однако, сообщения приходят в различных кодировках, а в mutt все отображается лишь в одной (utf8 по умолчанию), в результате часть сообщений оказываются нечитаемыми. Чтобы это исправить, надо добавить следующую строку в свой .mailcap:

cat >> ~/.mailcap
text/html; /usr/bin/w3m -dump -I %{charset} -T text/html '%s'; copiousoutput; description=HTML Text; nametemplate=%s.html


"Магической" является опция -I %{charset}. Результат - на картинках: