Регистрация...

Eserv Forum / E3 / Eserv 3 Mail Server Support / MaxMessageSize для различных доменов

imported // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Новости
12.10.2009
Переезд завершен
Ситуация следующая:

Есте две организации связанные между собой сетью. В каждой из них свой потовый сервер. Между ними настроен форвард друг на друга.

В одной есть ограничение MaxMessageSize, а в другой никаких ограничений нет.

Задача. Как отключить или обойти проверку на MaxMessageSize если письмо принимается с сервера второй организации и если отправляется на сервер второй организации?

У меня мысль вставить код в OnMessageEnd перед проверкой на размер, только вот пока затрудняюсь какой. Можно ли использовать по типу MContenta?
 
Комментарии к этой версии (28.08.2006 17:33) [~mixsv] 4ed6b3b3
АвторДатаТекстtags
Dandy28.08.2006 18:02
Да, в стандартном конфиге проверка на максимальный размер письма не подпадает ни под какие "белые списки" (в Pig* это обрабатывется более гибко ). Поможет например следующая правка OnMessageEnd:

PeerIP= xx.xx.xx.xx 0= [IF] MESSAGE-SIZE MaxMessageSize > | DeleteCurrentFile " 552 ERR too large message size{CRLF}" SMTP_FPUTS EvalRules: smtp\filters\AutoBlackList \EOF \ -4007 THROW [THEN]
ну или одной строкой через: "|"

P.S. не забудьте, что если правите непосредственно в acsmtp\conf\ то этот файл правил будет заменен при обновлении версии, чтобы сохранить свой, положите его в тот же каталог, только поддерева myconf (все поддерево нужно создать самим)
imported
pig28.08.2006 18:04
RCPTTO =~ *@trusted.domain.ru PeerIP= xxx.xxx.xxx.xxx OR 0= [IF] \ а здесь старый код проверки на размер [THEN]

  • @trusted.domain.ru — это шаблон их адресов, используемый в EmailSmtpForward (я правильно понял?); срабатывает при отправке туда xxx.xxx.xxx.xxx — IP-адрес их сервера, срабатывает при получении оттуда
imported
mixsv28.08.2006 18:17
Да, то что нужно Спасибо.

Для справки: слово 0= — это инверсия логической операции?
imported
pig28.08.2006 19:04
Для логической — да. Вообще — сравнение с нулём. FALSE Форта, как и у большинства других языков — ноль.
Кстати, OR и AND — не логические, а побитовые, это надо учитывать при конструировании сложных выражений.
imported
mixsv29.08.2006 08:54
Спасибо. Все понял.

Еще вопрос по теме. Я тут узнал, что на втором сервере планируется обслуживать еще один почтовый домен.

Возможно ли брать маски доменов, отправка писем на которые не проверяется на размер, из файла?
imported
Dandy29.08.2006 09:34
Да, например:
RCPTTO GetDomainFromEmail S" c:\bla bla bla\MaxMessageSizeWhiteList.txt" IsInFile


Результат — TRUE (-1) / FALSE (0).
imported
mixsv29.08.2006 10:36
Dandy пишет: Да, например:
RCPTTO GetDomainFromEmail S" c:\bla bla bla\MaxMessageSizeWhiteList.txt" IsInFile


Результат — TRUE (-1) / FALSE (0).


Ага. Значит в файле MaxMessageSizeWhiteList.txt я должен прописать что-то вроде:

domen1.ru domen2.ru

без имени ящика и собаки?
imported
Dandy29.08.2006 10:54
Да, только в фале первой строкой должен идти заголовок (т.е. напишите например DOMAIN) а дальше список доменов
imported
pig29.08.2006 12:14
Лучше, наверное, проверять целиком RCPTTO и использовать те же шаблоны, что и в EmailSmtpForward. Тогда точно разнобоя не будет. Если у вас форвард настроен только на этот сервер, то можете проверять прямо по этому списку.
imported
mixsv29.08.2006 16:02
Да, все работает. Пробовал оба варианта работы с файлом. В принципе для моей задачи, где всего два домена и один форвард-сервер, оба приемлемы и не трудоемки.

Кстати. Мы кажется забыли про PeerIP= 127.0.0.1

Если по какой-то причине второй сервер не примет наш большой файл, то он вернется и застрянет в 127.0.0.1/25.

Такая ситуация возможна. Поэтому я добавил PeerIP= 127.0.0.1 в условие проверки

Всем спасибо.
imported
A V L17.01.2007 14:27
Что то у меня не совсем правильно работает видно в конструкции где-то ошибся

RCPTTO GetDomainFromEmail SMTP[MaxMSRcptTO] IsInFile MESSAGE-SIZE FIELD2 S@ > AND
[IF]
DeleteCurrentFile " 552 ERR too large message size {MESSAGE-SIZE} for {FIELD1} domain {RCPTTO}. Для домена {FIELD2} письмо слишком большое!{CRLF}" SMTP_FPUTS \EOF
[THEN]

В файле соответственно:
Domain;MMsize mail.ru;9800000 bk.ru;9800000 inbox.ru;9800000 list.ru;9800000 yandex.ru;9800000 narod.ru;9800000 ya.ru;9800000

В логе получается:

12:19:50; 868; 192.168.50.92; MAIL FROM: <aaaaa@pantv.ru>
12:19:50; 868; 192.168.50.92; 250 aaaaa@pantv.ru OK, my domain
12:19:50; 868; 192.168.50.92; RCPT TO: <bbbbb@pantv.ru>
12:19:50; 868; 192.168.50.92; 250 bbbbb@pantv.ru OK, my domain, user bbbbb exists
12:19:50; 868; 192.168.50.92; DATA
12:19:50; 868; 192.168.50.92; 354 send the mail data, end with .
12:19:50; 868; 192.168.50.92; 552 ERR too large message size 1473 for ya.ru domain. Для домена 9800000 письмо слишком большое!
12:19:50; 868; 192.168.50.92; QUIT
12:19:50; 868; 192.168.50.92; 221 Goodbye.

Во первых не должно было примениться (домена в списке нет)
Во вторых размер письма явно меньше заданного

Где поправить?
imported
pig17.01.2007 15:18
FIELD2 >NUM
S@ — это раскрытие макросов в строке, возвращает addr u. А вам надо из строки сделать число.
И в сообщении об ошибке замените FIELD2 на FIELD1.

Я бы вообще сделал так:
RCPTTO GetDomainFromEmail SMTP[MaxMSRcptTO] IsInFile DUP | DROP MESSAGE-SIZE FIELD2 >NUM >

Не будет сравнения с неизвестно чем (скорее всего, с нулём), если в списке не найдено.
imported
A V L17.01.2007 15:34
Спасибо. сейчас попробую.

FIELD2 там для отладки стояло (посмотреть с чем сравнило)
imported
A V L17.01.2007 15:49
Заработало.

Еще раз спасибо.
imported
Работает на Eserv/5.05567 (10.02.2020)