Использование postfixadmin vacations autoreply совместно с Exim

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Использование postfixadmin vacations autoreply совместно с Exim

Непрочитанное сообщение xM » 2015-10-01 16:22:58

Поскольку многие используют связку административки postfixadmin совместно с Exim то, надеюсь, это будет полезно.
Ввиду того, что postfixadmin заточен на Postfix то ряд его функций специфичны именно для "родного" мэйлера и в ряде случаев не позволяют, а, как например с vacation autoreply, и прямо не дают использовать весь его набор возможностей.
Но, при желании, всё поправимо.
Итак, для начала, правим конфиг Exim.

Код: Выделить всё

...
begin routers
...

vacation_autoreply:
  driver        = accept
  domains       = +local_domains
  condition     = ${lookup mysql{SELECT `active` FROM `vacation` WHERE \
                  `domain`='${quote_mysql:$domain}' AND \
                  `email`='${quote_mysql:$local_part@$domain}' AND \
                  `active`='1'}{true}{false}}
  senders       = "! ^.*-request@.* : ! ^owner-.*@.* :\
                   ! ^postmaster@.* : ! ^listmaster@.* :\
                   ! ^mailer-daemon@.* : ! ^root@.* :\
                   ! ^abuse@.* : ! ^noreply@.*"
  no_verify
  no_expn
  transport     = vacation_autoreply
  unseen

# --- local delivery
...
У меня он, как видно, стоит предпоследним перед локальной доставки.
Транспорт

Код: Выделить всё

...
begin transports
...

vacation_autoreply:
  driver  = autoreply
  user    = mailnull
  group   = mail
  once_repeat = 1d
  headers = Content-Type: text/plain; charset=utf-8\n\
            Content-Transfer-Encoding: 8bit
  to      = $sender_address
  from    = $local_part@$domain
  subject = ${rfc2047:${lookup mysql{SET NAMES utf8}{}}\
            ${lookup mysql{SELECT `subject` FROM `vacation` \
            WHERE `domain`='${quote_mysql:$domain}' AND \
            `email`='${quote_mysql:$local_part@$domain}'}{$value}}}
  text    = ${lookup mysql{SET NAMES utf8}{}}\
            ${lookup mysql{SELECT `body` FROM `vacation` \
            WHERE `domain`='${quote_mysql:$domain}' AND \
            `email`='${quote_mysql:$local_part@$domain}'}{$value}}

...
И, самое главное, делам возможность корректного изменения сообщений через интерфейс postfixadmin для администратор путём правки файла edit-vacations.php (здесь и далее файл .bak это оригинальный файл из дистрибутива).

Код: Выделить всё

root@beta:/usr/local/www/postfixadmin # diff -u edit-vacation.php.bak edit-vacation.php
--- edit-vacation.php.bak       2015-10-01 14:07:09.984241000 +0200
+++ edit-vacation.php   2015-10-01 14:08:09.631468000 +0200
@@ -57,9 +57,7 @@
 }
 list (/*NULL*/, $domain) = explode('@', $fUsername);

-$vacation_domain = $CONF['vacation_domain'];
-$vacation_goto = preg_replace('/@/', '#', $fUsername);
-$vacation_goto = $vacation_goto . '@' . $vacation_domain;
+$vacation_goto = '';

 $fCanceltarget = $CONF['postfix_admin_url'] . "/list-virtual.php?domain=" . urlencode($fDomain);
И то же для пользователя (внимание, правим 2 файла).

Код: Выделить всё

root@beta:/usr/local/www/postfixadmin/model # diff -u VacationHandler.php.bak VacationHandler.php
--- VacationHandler.php.bak     2015-10-01 14:25:14.994461000 +0200
+++ VacationHandler.php 2015-10-01 14:25:50.214442000 +0200
@@ -118,9 +118,7 @@
      */
     public function getVacationAlias() {
         global $CONF;
-        $vacation_domain = $CONF['vacation_domain'];
-        $vacation_goto = preg_replace('/@/', '#', $this->username);
-        $vacation_goto = "{$vacation_goto}@{$vacation_domain}";
+        $vacation_goto = '"";
         return $vacation_goto;
     }
 }
root@beta:/usr/local/www/postfixadmin/model # diff -u AliasHandler.php.bak AliasHandler.php
--- AliasHandler.php.bak        2015-10-01 14:46:53.035693000 +0200
+++ AliasHandler.php    2015-10-01 15:18:04.311878000 +0200
@@ -71,7 +71,10 @@
     public function is_vacation_address($address) {
         global $CONF;
         if($CONF['vacation'] == 'YES') {
-            if(stripos($address, '@' . $CONF['vacation_domain'])) {
+           $table_vacation = table_by_key('vacation');
+           $sql = "SELECT * FROM $table_vacation WHERE email = '$address' AND active ='1'";
+           $result = db_query($sql);
+            if($result['rows'] == 1) {
                 return true;
             }
         }
И, вуаля - имеем работающие автореспондеры под управлением postfixadmin.
IT voodoo blog https://kostikov.co

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35429
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Использование postfixadmin vacations autoreply совместно с Exim

Непрочитанное сообщение Alex Keda » 2015-11-18 8:29:55

Прикольно....
Давно, когда-то надо было - не доколупался :(
Убей их всех! Бог потом рассортирует...

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Использование postfixadmin vacations autoreply совместно с Exim

Непрочитанное сообщение xM » 2015-11-18 11:17:26

Alex Keda писал(а): Давно, когда-то надо было - не доколупался :(
Ну, в новой версии postfixadmin надо будет опять сырцы лопатить - там очень многое обновилось :-(
IT voodoo blog https://kostikov.co