Ввиду того, что 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}}
...
Код: Выделить всё
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);
Код: Выделить всё
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;
}
}