Почтовая система для домашней машины.

www.karman.com.ua
портал о хостинге в Украине
Хостинг + Украина = Karman.com.ua

Сайт от А до Б

/

Основы сайта

/

Интересные скрипты

/

Изучаем PHP

/

Как заработать на сайте

/

Раскрутка сайта

/

CMS


Почтовая система для домашней машины. 

Еще по теме:
  wwjd.ru - христианская поисковая система
  Борьба оптимизаторов и поисковых систем
  Информация о SEO – оптимизаци под поисковые системы.
  SEO для начинающих: роботы поисковых систем – это люди
  Различие между оптимизацией под поисковые системы (SEO) и поисковым маркетингом (SEM)
  Способы улучшения позиций в поисковых системах
  Построение системы ссылок для SEO
  Позиции в поисковых системах, улучшите их

В настоящее время в web можно найти множество статей о том, как настроить почтовый сервер для небольшой организации или огромной компании, как реализовать аутентификацию с помощью LDAP или MySQL, как настроить SSL и DNSBL или даже как хранить все письма в SQL-базе, но нет практически ни одной о том, как настроить почтовую систему для работы на обыкновенной домашней машине. Автор не несет никакой отвественности за ваши испорченные нервы, потерянную почту и все остальное, что может случиться :).


0.1 Некоторые термины, сокращения и соглашения

Имена хостов, пользователей, имена файлов, почтовые адреса и некоторые термины выделены в тексте вот так.

В статье предполагается, что вы работаете на машине с UNIX-like OS с правами некоего пользователя, и этот пользователь не root (хотя права root нам тоже понадобятся). Назовем его jdoe. Имя машины — jdoe.local.provider.net. Ваш провайдер предоставляет вам smtp-сервер — smtp.provider.net, через который вы можете свободно, без какой-либо аутентификации (исключая аутентификацию по вашему адресу) отправлять почту и pop3 сервер — pop3.provider.net, где у вас есть почтовый ящик jdoe@provider.net. Также у вас есть почтовый ящик на одном из бесплатных серверов — jdoe@zzzmail.com (pop3-сервер — pop3.zzzmail.com).

Программы, которые требуется запускать с правами суперпользователя в примерах имеют в качестве приглашения интерпретатора знак #, программы запускаемые от имени пользователя (jdoe) — знак $.


1. Что нам понадобится.

Список программ, которые нам понадобятся:

То, что здесь указаны URL'ы домашних страниц программ, не значит что надо качать оттуда исходники, собирать их самому и ставить как попало в систему. Наверняка эти программы есть в виде портов/пакетов/etc для вашей системы, проверьте ;). Если ваши версии немного отличаются от рассматриваемых — ничего страшного, думаю, все будет работать. (за исключением exim: формат конфигурационного файла версий 3.X и более ранних совершенно несовместим с форматом exim 4.X).


2. Настройка.
2.1 Exim.

Итак, приступим. (Процесс сборки программ не расматривается). Начнем мы с exim. Exim — это Mail Transfer Agent, т.е. как понятно из названия, программа, занимающаяся передачей почты. Конфигурационный файл программы обычно находится в /etc/exim/exim.conf или /usr/local/etc/exim/exim.conf.

Работа exim основана на логических элементах — драйверах: роутерах и транспортах. Роутер производит операции над адресом и определяет, как дальше пойдет процесс доставки сообщения: оно будет передано транспорту или его адрес будет переписан (например, на основе файла aliases). Также роутер может прервать процесс доставки (например, если указанный в адресе назначения пользователь не существует на сервере). Транспорты передают копию сообщения из почтовой очереди exim в указанное место назначения (файл, pipe, удаленный хост, etc).

Прежде немного теории. Во-первых, из каких частей состоит почтовый адрес? RFC 2822 дает ответ на этот вопрос: часть адреса до «@» называется local part, часть адрес после «@» — domain part. В адресе jdoe@zzzmail.com: local partjdoe, domain partzzzmail.com. В файле конфигурации exim можно использовать переменную $local_part (и еще множество других), которая содержит локальную часть адреса.

Приблизительный файл конфигурации (то, что начинается с #, — мои коментарии, неплохо бы их читать):

# Здесь вместо 'jdoe' укажите пользователя, под которым вы обычно работаете, это даст ему
# возможность управлять exim'ом без прав root.
trusted_users = jdoe
queue_list_requires_admin = false

#
# Роутеры.
# порядок следования роутеров в файле конфигурации очень важен.
#
begin routers

#
# Если домен адреса назначения в письме не является локальным ( 'domains = !@', символ '@'
# означает 'имя локальной машины'.), для всех доменов отправить его через сервер, указанный
# в переменной smarthost, при помощи транспорта remote_smtp (см. дальше).
#
smarthost:
	driver = manualroute
	domains = !@
	transport = remote_smtp
	route_list = * smtp.provider.net

#
# Если адрес назначения в письме встречается в первом столбце в файле /etc/aliases,
# изменить его на адрес находящийся во втором столбце и начать прохождение по списку роутеров снова.
# Если файл alias'ов в вашей системе находится в другом месте (например, /etc/mail/aliases),
# исправьте здесь его имя.
#
aliases:
	driver = redirect
	data = ${lookup{$local_part}lsearch{/etc/aliases}}
	file_transport = address_file
	pipe_transport = address_pipe

#
# Если в домашнем каталоге пользователя существует файл .forward, продолжить обработку письма
# в соотвествии с инструкциями в этом файле (man 5 forward).
#
dotforward:
	driver = redirect
	check_local_user = true
	file = $home/.forward
	file_transport = address_file
	pipe_transport = address_pipe

#
# Ну и наконец, если письмо достигло этого роутера, и пользователь, которому предназначено письмо
# существует в системе (check_local_user = true) -- передать его транспорту local_delivery.
# если пользователь не существует -- будет сформировано сообщение об ошибке доставки письма.
#
local_user:
	driver = accept
	check_local_user = true
	transport = local_delivery

#
# Транспорты.
#
begin transports

#
# Доставка локальному пользователю: берем письмо, и просто добавляем его к файлу
# /var/mail/$local_part.
#
local_delivery:
	driver = appendfile 
	# Если почтовый каталог в вашей системе находится не в /var/mail, а скажем, в /var/spool/mail,
	# исправьте эту строку.
	file = /var/mail/$local_part

#
# В файле alias'ов или в .forward можно определить альтернативный почтовый ящик.
# Например, в aliases:
# 
# bgates:	/mail/bgates
#
# В остальном работает так же, как транспорт local_delivery.
#
address_file:
	driver = appendfile

#
# Передать письмо указанной программе на stdin. Опять же на примере aliases:
#
# bgates:	|/usr/bin/bmf -S
#
address_pipe:
	driver = pipe
	return_output

#
# Отправить письмо через указанный хост по smtp.
#
remote_smtp:
	driver = smtp

#
# Переписывание адресов.
# Имя вашей машины -- jdoe.local.provider.net, и все письма, исходящие с нее,
# будут иметь адрес источника user@jdoe.local.provider.net, что совсем не хорошо, поэтому
# мы будем переписывать адрес источника в них.
# Здесь:
#	jdoe@jdoe.local.provider.net -- оригинальный адрес источника
#	jdoe@provider.net -- на этот адрес в письмах будет заменяться jdoe@jdoe.local.provider.net.
#	Ffrs -- некоторая 'магическая' комбинация флагов, особо любопытные могут прочитать подробнее
#			в документации по exim, в разделе 'ADDRESS REWRITING'.
#
begin rewrite
jdoe@jdoe.local.provider.net     jdoe@provider.net Ffrs

#
# Если письмо не удалось доставить сразу повторять попытки в первые сутки каждый час,
# затем ежедневно в течении недели.
# После истечения этого срока будет сформировано письмо на исходящий адрес сообщения
# с объяснением причин невозможности доставки.
#
begin retry
*       *       F,1d,1h; F,7d,1d

Минимальный файл alias'ов должен состоять из одной строчки:
root:	jdoe
Таким образом вся почта, предназначенная пользователю root (сообщения от различных демонов, средств наблюдения за системой, etc), будет пересылаться вашему пользователю.

Теперь необходимо убедиться, что exim в вашей системе — основной MTA, для этого выполним команду:
$ /usr/sbin/sendmail -bV

Если ее вывод совсем не похож на:
Exim version 4.31 #3 built 05-Apr-2004 02:01:05
Copyright (c) University of Cambridge 2004
[...]
необходимо настроить вашу ОС таким образом, чтобы exim был основным MTA. В некоторых системах нужно отредактировать /etc/mailer.conf или /etc/mail/mailer.conf, в Debian GNU/Linux выполнить команду:
update-alternatives --config mail-transport-agent
и выбрать в списке exim. Одним словом обратитесь к документации на вашу ОС ;)

Для управления очередью сообщений необходимо периодически запускать exim с ключем -q, для этого добавим в файл /etc/crontab (или другой подобный файл в вашей системе, к примеру /var/cron/tabs/root) строку:

@hourly		/usr/sbin/sendmail -q
и выполним команду:
# crontab /etc/crontab

Все. С настройкой exim покончено, теперь вы можете попробовать послать письмо самому себе с помощью программы mail:

$ mail jdoe
Subject: test!
test!
^D
$ mail
Mail version 8.1.2 01/15/2001.  Type ? for help.
"/var/mail/jdoe": 1 message 1 unread
>N  1 jdoe@jdoe.local.p  Mon Jan 01 00:01   14/450   test!
& 1
Message: 1
From jdoe@jdoe.local.provider.net Mon Jan 01 00:01:00 2235
Envelope-to: jdoe@jdoe.local.provider.net
To: jdoe@jdoe.local.provider.net
Subject: test!
From: jdoe@jdoe.local.provider.net
Date: Mon Jan 01 00:01:00 2235

test!

&

PS: если на этом этапе возникают проблемы, а exim пишет в логи о том, что невозможно создать lockfile, выполните команду (если почтовый каталог в вашей системе не /var/mail, замените этот путь на правильный):
# chmod 1777 /var/mail


2.2 Mutt

Mutt — это очень мощный почтовый клиент (особенно если ознакомиться с документацией ;)). Для начала запишем следующие строки в ~/.muttrc:
# Кодировка для ввода/вывода текста
set charset="koi8-r"
# Кодировки для исходящих сообщений
set send_charset="us-ascii:iso-8859-1:koi8-r"

Запустим mutt:
$ mutt

Вы должны увидеть содержимое своего почтового ящика — письмо из пункта 2.1.


2.3 Fetchmail.

Теперь надо как-нибудь забирать почту с POP-серверов. Мы будем делать это с помощью fetchmail. Fetchmail получает письма с POP— (или IMAP-) сервера и передает их локальному MTA (т.е. exim). Конфигурационный файл программы — ~/.fetchmailrc — довольно прост, вот его пример:

# По умолчанию fetchmail ожидает, что наш MTA слушает порт 127.0.0.1:25, но
# поскольку это не так, мы указываем другой способ доставки почты.
defaults mda "/usr/sbin/sendmail -t -f %F %T"
# Опрос сервера:
# poll <адрес сервера> proto pop3 user <имя пользователя> pass <пароль>
poll pop3.zzzmail.com proto pop3 user "jdoe" pass "mYsEcReT"
poll pop3.provider.net proto pop3 user "jdoe" pass "AnOtHer"

Теперь просто запускаем:
$ fetchmail
и почта попадает в наш почтовый ящик. (Проверьте с помощью mutt.)

(PS: для тех, кто хочет управлять почтой прямо на сервере, просматривая заголовки писем, я бы рекомендовал Prepop, http://freshmeat.net/projects/prepop/.)


2.3.1 Запуск fetchmail демоном.

Да, мне тоже лень запускать fetchmail вручную :). Поэтому можно заставить работать его демоном, проверяя наличие почты на серверах через заданный промежуток времени. Изменим немного ~/.fetchmailrc:

# Проверять почту каждые полчаса
set daemon 1800
set logfile /home/jdoe/.fetchmail/fetchmail.log
defaults mda "/usr/sbin/sendmail -t -f %F %T"
poll pop3.zzzmail.com proto pop3 user "jdoe" pass "mYsEcReT"
poll pop3.provider.net proto pop3 user "jdoe" pass "AnOtHer"

Создаем директрию ~/.fetchmail, а в ней файл fetchmail.log:
$ mkdir ~/.fetchmail
$ touch ~/.fetchmail/fetchmail.log

Туда будет записываться протокол работы fetchmail.

Осталось только как-нибудь заставить fetchmail автоматически запускаться при старте системы. Для этого воспользуемся услугами cron: создадим файл ~/.fetchmail/fetchmail.cron:

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
@reboot	fetchmail

Выполним команды:
$ crontab ~/.fetchmail/fetchmail.cron
$ fetchmail


2.4 Тест

Напишем самому себе письмо на один из наших адресов (скажем, на jdoe@provider.net) и отправим его, если с соединением все в порядке, то через полчаса (или что вы там указали в ~/.fetchmailrc) мы получим его обратно. Обратите внимание на адрес отправителя: если у вас все правильно работает, он будет тем, что вы указали в секции rewriting в файле конфигурации exim.


3. Для тех кому этого мало.

В данный момент наша почтовая система настроена и прекрасно функционирует. Но как же такие веши как сортировка почты и фильтрация спама? ;)


3.1 Сортировка писем.

Для сортировки почты вы воспользуемся procmail. Для начала создадим файл ~/.forward, в который запишем всего одну строку:

"|/usr/bin/procmail"

(Если у вас procmail находится в другом месте, исправьте эту строку на правильную).

Создадим директорию ~/.mail — теперь вся почта у нас будет храниться там:
$ mkdir ~/.mail

Допустим, вы подписаны на несколько списков рассылки, ну, скажем users@lists.youros.org и security@lists.youros.org, а также часто получаете письма с места работы (домен yourcompany.com) и не хотели бы их смешивать в одном почтовом ящике. Вот сценарий procmail, который реализует это:

# Сюда будет помещаться почта, не подходящая ни под одно из
# следующих правил.
DEFAULT=$HOME/.mail/inbox
# Файл, содержащий протокол работы procmail.
LOGFILE=$HOME/.procmail/procmail.log

:0:
* ^X-Mailing-List: 
$HOME/.mail/youros-users

:0:
* ^X-Mailing-List: 
$HOME/.mail/youros-security

:0:
* ^From:.*<.+@yourcompany.com>
$HOME/.mail/yourcompany

Также отредактируем конфиг mutt (файл ~/.muttrc):

# Не имеет к сортировке почты никакого отношения, просто позволит вам отвечать
# в списки рассылки.
lists users@lists.youros.org
lists security@lists.youros.org

# Директория с почтовыми ящиками (в последствии можно обращаться к этому значению,
# записывая знак '=')
set folder="~/.mail"
# Проверять наличие почты в этих ящиках и сообщать об этом пользователю
mailboxes =inbox =youros-users =youros-security =yourcompany
# Сюда складывать прочитанную почту
set mbox="=readed"
# Сюда -- посланную
set record="=sent"
# Сюда -- черновики писем
set postponed="=postponed"
# Начинать работу с отображения этого ящика
set spoolfile="=inbox"

set charset="koi8-r"
set send_charset="us-ascii:iso-8859-1:koi8-r"

Запускаем mutt, видим содержимое ящика ~/.mail/inbox, нажимаем «c», а потом «?» — получаем список почтовых ящиков.


3.2 Фильтрация спама

Cэкономьте на профессиональных грyзoпepевoзках, APEНДА КВAРTИР в МOCKВE, Лучшие туры для отдыха в России и Зарубежом. Брр! Письма подобного содержания валятся сотнями и, казалось бы, нет способа избавить себя от чтения этого мусора. Для выделения таких писем и помещения их в отдельный почтовый ящик мы будем использовать bmf (или другую подобную программу). Работа bmf основана на ведении статистики «хороших» и «плохих» слов и анализе писем на наличие этих слов.

Немного модифицируем ~/.procmailrc:

# Сюда будет помещаться почта, не подходящая ни под одно из
# следующих правил.
DEFAULT=$HOME/.mail/inbox
# Файл, содержащий протокол работы procmail.
LOGFILE=$HOME/.procmail/procmail.log
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

:0fw
| bmf -p

:0:
* ^X-Spam-Status: Yes
$HOME/.mail/spam

:0:
* ^X-Mailing-List: 
$HOME/.mail/youros-users

:0:
* ^X-Mailing-List: 
$HOME/.mail/youros-security

:0:
* ^From: .* <.+@yourcompany.com>
$HOME/.mail/yourcompany

Таким образом весь спам будет помещаться в почтовый ящик ~/.mail/spam.

Осталось только создать базы «плохих» и «хороших» слов для bmf. Отредактируем файл ~/.muttrc — добавим к нему следующие строки:

# bayesian mail filter
macro index  "|bmf -S\n" "SPAM"
macro index  "|bmf -N\n" "NOSPAM"
macro pager  "|bmf -S\n" "SPAM"
macro pager  "|bmf -N\n" "NOSPAM"

Как только встречается очередное подобное письмо, просто нажимаем F9, и спама становится чуточку меньше :)

Чтобы обсудить это в форуме, нажмите здесь.


Хостинг-источник: http://karman.com.ua, http://www.cybersecurity.ru/manuals/net/tech/538.html
  системы управления контентом и построение вашего интернет-бизнеса
  Антиспам фильтры: как находить правильное программное обеспечение для вашей системы
Есть вопросы о хостинге и о сайтах?
и получи ответ от профессионалов, которые обожают помогать людям :).
Еще по теме:
  Каталоги и поисковые системы – сравнительный анализ.
  В системе интернет-адресации ликвидирована важная ошибка
  Положительные стороны системы по имени CUNIC
  Почему доменные имена высшего уровня означают лучшую индексацию поисковыми системами
  Электронная платежная система Alertpay
  система интернет денег Liberty Reserve
  система электронных денег E-gold
  Яндекс деньги (yandex money) достоинства и недостатки системы
  Улучшение положения в поисковых системах: недоразумения относительно рейтинга страниц Google
  Как добиться, чтоб Ваш сайт быстро проиндексировали поисковые системы
  Будни клиента систем контекстной рекламы.
  12 советов по оптимизации вашего веб-сайта для поисковых систем.
  Оптимизация страниц для поисковых систем.

© СПД Праведно-Счастливый Аладдин Ярославович, 2004-2008. Все права защищены. При цитировании материалов ссылка на www.karman.com.ua обязательна. Редакция "Кармана" может не разделять точку зрения авторов статей, сообщений и ответственности за их содержание не несет.

Быстрый переход к содержимому сайта Karman.com.ua:
Новости, советы, углубленные знания, знания для новичков, законодательство, интересные скрипты, фотогалереи, отчеты, статьи о хостинге: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
Часто задаваемые общие вопросы о хостинге, про FTP, PHPMyAdmin и MySQL, CPanel, Предустановленные скрипты, WHM, Cron, .htaccess, SSH, Паролирование директорий, О доменах, о работе с сайтом, о Раскрутке сайта, об Электронной почте, про Основы web-программирования: 0, 1
Энциклопедия основных терминов хостинга, программного обеспечения, железной стороны хостинга, технологий, электронной почты и доменов: 0, 1, 2, 3, 4, 5, 6
Сайты о хостинге (форумы, хостинг-провайдеры, студии веб-дизайна, домен-регистраторы, инструментарии в помощь вебмастеру): 0, 1, 2

Rambler's Top100