Своя почта для ubuntu.ru Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
ideapool:почта [2010/09/14 13:08]
создано
ideapool:почта [2010/09/14 14:36]
Строка 133: Строка 133:
  ​permit_mynetworks  ​permit_mynetworks
  ​reject_unauth_destination  ​reject_unauth_destination
 + ​permit
  
 # Ограничения на данные. Не принимаем в случае некорректной передачи # Ограничения на данные. Не принимаем в случае некорректной передачи
Строка 139: Строка 140:
 </​code>​ </​code>​
  
-Как видно, postfix для определения валидных получателей использует одну стандартную карту - **/​etc/​postfix/​mailboxes/​aliases**. Её мы будем генерить раз в сутки на основе БД SMF таким вот скриптом:​+Как видно, postfix для определения валидных получателей использует одну стандартную карту - **/​etc/​postfix/​mailboxes/​smf-aliases**. Её мы будем генерить раз в сутки на основе БД SMF таким вот скриптом:​
  
 <code perl> <code perl>
-Скрипт чуть позже+#!/​usr/​bin/​perl 
 + 
 +use 5.010; 
 +use DBI; 
 + 
 +#############################################################​ 
 + 
 +# Настройки базы данных 
 +$MYSQL_host = '​localhost';​ 
 +$MYSQL_port = '​3306';​ 
 +$MYSQL_user = '​mail';​ 
 +$MYSQL_pass = '​Passw0rd';​ 
 +$MYSQL_db = '​smf';​ 
 + 
 +# Параметры SMF - группа пользователей почты и префикс таблиц 
 +$SMF_GID = '​9';​ 
 +$SMF_prefix = '​smf_';​ 
 + 
 +# Обслуживаемый домен 
 +$domain = "​ubuntu.ru";​ 
 + 
 +# Файл псевдонимов 
 +$postfix_file = "/​etc/​postfix/​mailboxes/​smf-aliases";​ 
 + 
 +#############################################################​ 
 + 
 +$dbh = DBI->​connect("​DBI:​mysql:​$MYSQL_db:​$MYSQL_host:​$MYSQL_port",​$MYSQL_user,​$MYSQL_pass) or die "Hey guys! We've got a big error here...";​ 
 + 
 +# Выполняем запрос 
 +my $sth = $dbh->​prepare("​SELECT memberName, realName, emailAddress 
 + FROM ${SMF_prefix}members 
 + WHERE (ID_GROUP = $SMF_GID OR FIND_IN_SET($SMF_GID,​ additionalGroups))"​);​ 
 +$sth->​execute() or die "Hey guys! We've got a big error here...";​ 
 + 
 +# Открываем файл ​псевдонимов для Postfix 
 +open ALIASES, ">​$postfix_file"​ or die "​Can'​t open $postfix_file\n";​ 
 + 
 +# Анализируем ответ 
 +foreach my $row ($sth->​fetchrow_hashref()) { 
 + my $user = $row->​{realName};​ 
 + # Если имя пользователя содержит неразрешённые символы - пропускаем его 
 + # Разрешены любые буквы, цифры и символы "​.",​ "​-"​ и "​_"​ 
 + next if $user =~ /​[^\w.-_]/;​ 
 + # Пишем псевдоним в файл 
 + say ALIASES "​$user\@$domain\t$row->​{emailAddress}";​ 
 +
 + 
 +# Закрываем файл псевдонимов и создаём хеш для postfix'​а 
 +close ALIASES; 
 +`/​usr/​sbin/​postmap hash:​$postfix_file`;​
 </​code>​ </​code>​
  
 Итого поставленная цель достигнута. Кроме того, можно вручную добавлять алиасы,​ чтобы не создавать лишние аккаунты в SMF. Для этого служит вторая карта - **local-aliases**,​ которая заполняется по необходимости вручную. Итого поставленная цель достигнута. Кроме того, можно вручную добавлять алиасы,​ чтобы не создавать лишние аккаунты в SMF. Для этого служит вторая карта - **local-aliases**,​ которая заполняется по необходимости вручную.
 +
 +В качестве дополнения к этому:
 +
 +  * [[jabber|Свой Jabber сервер]]