Re: Re: Hold & Forward

От: Dmitry Akindinov <dimak_at_mx_ru>
Дата: Fri 29 Nov 2002 - 18:12:58 MSK


Hello, on 29.11.2002 16:44, Vadim Pronin at cgpro@mail.pronin.com wrote:

> Hello Roman,
>
> Friday, November 29, 2002, 1:45:10 PM, you wrote:
>
> RP> on 28.11.02 3:41 PM, Vadim Pronin at cgpro@mail.pronin.com wrote:
>

>>> Добрый день!
>>> 
>>> Две проблемы:
>>> 
>>> 1. Если установить в hold mail for domains какой-нибудь домен и
>>> параллельно включить опцию Forward all mail to smtp.provider.com то

>
>> Если оно установлено, то подразумевается, что сервер работает в режиме
>> Dialup, и сообветственно является "неполноценным", и не может и не должен
>> выполнять работу "нормального" сервера.

>
> У нас просто следующая ситуация:
> Сервер работает в "полноценном" режиме, но из-за того что "внешний"
> трафик тарифицируется, а "городской" нет, решили переправлять всю
> почту на SMTP вышестоящего провайдера. В тоже время у нас есть
> несколько доменов для которых мы делаем hold mail..
> Не предвидится ли исправление этой "неприятности" ?

Можно обойти посылку через "смартхост", добавив в роутер запись (которая, кстати, позволит также релеить для этого домена) с суффиксом smtp:

direct.domain.name = direct.domain.name@direct.domain.name.SMTP

С этой записью почта на direct.domain.name будет отправлена напрямую (без использования Forwarding Server)

Теперь, если direct.domain.name добавить в список Hold mail for Domains - получим желаемый результат: почта на direct.domain.name не будет релеиться, а поставится в очередь. По комманде ETRN direct.domain.name сервер отправит эту почту прямо на direct.domain.name ("смартхост" использоваться не будет).

>>> почта на холд-домен уходит на smtp.provider.com (если принята от
>>> "клиента") или не принимается (если не от "клиента") . В чем тут
>>> проблема?
>>> 
>>> 2. Можно ли сделать _правило_ которое будет выборочно отправлять почту
>>> напрямую на SMTP получателя либо на какой-то другой определенный SMTP
>>> (скажем smtp.provider.com).. К примеру для того чтобы маленькие письма
>>> отправлять напрямую, а большие слать на smtp.provider.com ??

>
>> Можно, но только для конкретного получателя, т.к. в RedirectTo/MirrorTo
>> нельзя указать '*'.

> каким образом?

IF Each recipient IS test@some.domain.name

   Message Size Greater 20k
THEN
   Mirror to test%some.domain.name@some.domain.name.smtp    Discard

Не проверял, но должно работать.

> Я только понял как это можно сделать через Router.. но как отбирать
> письма по размеру - не понял :((

Если идти по пути извращений до конца, то, в принципе, можно так же отрабатывать почту при наличии в письме нескольких адресатов. Потребуется внешний скрипт, который вставит некий спец заголовок (воизбежание повторного применения правила) и заголовки Envelope-to: с оригинальными адресами, но модифицированными суффиксом smtp.

IF Message Size Greater 20k

   Header-Field IS NOT X-Special-Delivery: yes THEN
   Execute "[RCPT][FILE] mySmartRelay.sh"    Discard

mySmartRelay.sh:

#!/bin/sh

MSG_FILE="/var/CommuniGate/${2}"

(echo "X-Special-Delivery: yes"
shift 3
while [ "Z${1}" != "Z" ]; do
  echo "Envelope-To: ${1}.smtp"
  shift
done
cat ${MSG_FILE}) | /usr/local/sbin/CommuniGate/sendmail

exit 0

По-хорошему, надо бы не просто дописывать .smtp к оригинальному адресу, а делать преобразование типа r.N@domain.N -> r.N%domain.N@domain.N Я не знаю, как это изящно сделать в шелле :-)

-- 
Best regards,
Dmitry Akindinov -- Stalker Labs
Получено Fri Nov 29 15:12:56 2002

Этот архив был сгенерирован hypermail 2.1.8 : Tue 21 Feb 2006 - 03:14:17 MSK