Ситуация такая, с сервера qmail работает пересылка по alias-у на другой сервер, на котором работает postfix. Так вот давая команды postfix-у qmail делает такую вещь, после команды data пишет например так:
Return-Path: <tralala@domain.tld> X-Original-To: test@dom.net Delivered-To: test@dom.net Received: from m1.domain.tld (m.domain.tld [123.213.132.231]) Delivered-To: tralala-forward@domain.tld Date: Thu, 13 Jan 2005 14:00:37 +0300 From tralala@domain.tld Thu 13 Jan 11:00:04 2005 X-Mailer: The Bat! (v2.01.3) Educational Subject: Test Content-Type: text/plain; charset=Windows-1251 Content-Transfer-Encoding: 8bit ..... и т.д.Посмотрите на строку "From tralala@domain.tld Thu 13 Jan 11:00:04 2005" Qmail там не ставит после From двоеточие. Postfix же в свою очередь из за того, что эта запись не похожа на заголовок (нет двоеточия) считает, что уже началось тело письма и вставляет пустую строку, а все поля которые дальше прописаны, уже считаются телом письма. Соответственно получается корявое письмо, так как многие клиенты считают, что после пустой строки всегда идёт уже тело письма, да и постфикс так считает. Ну оно и верно, что они так считают.
Вопрос, кто не правильно делает, qmail, потому что пишет без двоеточия там где оно нужно или postfix, который сам доставляет пустую строку???? И как эту фичу выключить в postfix, если она конечно выключается?
Сорри за форматирование, вот так пральней:Return-Path: <tralala@domain.tld>
X-Original-To: test@dom.net
Delivered-To: test@dom.net
Received: from m1.domain.tld (m.domain.tld [123.213.132.231])
Delivered-To: tralala-forward@domain.tld
Date: Thu, 13 Jan 2005 14:00:37 +0300
From tralala@domain.tld Thu 13 Jan 11:00:04 2005
X-Mailer: The Bat! (v2.01.3) Educational
Subject: Test Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: 8bit
..... и т.д.
Выяснил, как сам qmail поступает в таких ситуациях, когда в заголовке письма, встречаются строки без знака ":". qmail их просто игнорирует, как будто их и не было, то есть в итоговом письме, этих строк совсем нет. Как бы сделать тоже самое в postfix, а если нет такого параметра в конфиге, то где можно в сырцах это поправить?
>Вопрос, кто не правильно делает, qmail, потому что пишет без двоеточия там
>где оно нужно или postfix, который сам доставляет пустую строку???? И
>как эту фичу выключить в postfix, если она конечно выключается?
1) Qmail отдает именно, то что получил сам - это MTA, а не почтовый фильтр.
2) Postfix НЕ вставляет пустых строк ни при каких обстоятельствах (точнее вставить можно через PREPEND, но это не ваш случай). Несколько раз в год автора пытаются уговорить сделать это, но Venema успешно отпирается.
3) Виноват, тот кто сформировал такое письмо.
>1) Qmail отдает именно, то что получил сам - это MTA, а
>не почтовый фильтр.
Понял, но я не администратор того qmail, скорее всего там такая фигня из за спамасасина или антивиря.>2) Postfix НЕ вставляет пустых строк ни при каких обстоятельствах (точнее вставить
>можно через PREPEND, но это не ваш случай). Несколько раз в
>год автора пытаются уговорить сделать это, но Venema успешно отпирается.
Как это не вставляется, сделайте такое:$ telnet mail.domain.net 25
Trying 123.231.213.132...
Connected to mail.domain.net.
Escape character is '^]'.
220 mail.domain.net ESMTP Postfix
mail from: <test@mail.ru>
250 Ok
rcpt to: <test@domain.net>
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
from <test@mail.ru>
subject: Test
.
250 Ok: queued as DF0635C326
quit
221 Bye
Connection closed by foreign host.Перед subject, запись "from <test@mail.ru>" именно без двоеточия после from.
После такого, вы увидите, что subject почтовый клиент, не вопринимает как заголовок письма, да и сам postfix тоже. В постфиксе проверил это через body_check и header_check на subject. Если from c двоеточием, то срабатывает фильтр который в header_check, если без, то который в body_check. Версия postfix 2.1.5.>3) Виноват, тот кто сформировал такое письмо.
Понятно.
>Понял, но я не администратор того qmail, скорее всего там такая фигня
>из за спамасасина или антивиря.
Согласен.
А postfix ваш?>>2) Postfix НЕ вставляет пустых строк ни при каких обстоятельствах (точнее вставить
>>можно через PREPEND, но это не ваш случай). Несколько раз в
>>год автора пытаются уговорить сделать это, но Venema успешно отпирается.
>Как это не вставляется, сделайте такое:
Для вашего примера он вставит:
"To:", "Message-Id:", "Date:", "From:" и закроет вставленные им заголовки пустой строкой все. Если вы попробуете провести эксперемент с письмом содержащим эти обязательные поля (т.е с "битым" после них), то увидите, что никаких пустых строк добавленно не будет.
>>Понял, но я не администратор того qmail, скорее всего там такая фигня
>>из за спамасасина или антивиря.
>Согласен.
>А postfix ваш?
>
>>>2) Postfix НЕ вставляет пустых строк ни при каких обстоятельствах (точнее вставить
>>>можно через PREPEND, но это не ваш случай). Несколько раз в
>>>год автора пытаются уговорить сделать это, но Venema успешно отпирается.
>>Как это не вставляется, сделайте такое:
>Для вашего примера он вставит:
>"To:", "Message-Id:", "Date:", "From:" и закроет вставленные им заголовки пустой строкой все.
>Если вы попробуете провести эксперемент с письмом содержащим эти обязательные поля
>(т.е с "битым" после них), то увидите, что никаких пустых строк
>добавленно не будет.
Сорри!!
>>Понял, но я не администратор того qmail, скорее всего там такая фигня
>>из за спамасасина или антивиря.
>Согласен.
>А postfix ваш?
>
Postfix мой.>>>2) Postfix НЕ вставляет пустых строк ни при каких обстоятельствах (точнее вставить
>>>можно через PREPEND, но это не ваш случай). Несколько раз в
>>>год автора пытаются уговорить сделать это, но Venema успешно отпирается.
>>Как это не вставляется, сделайте такое:
>Для вашего примера он вставит:
>"To:", "Message-Id:", "Date:", "From:" и закроет вставленные им заголовки пустой строкой все.
>Если вы попробуете провести эксперемент с письмом содержащим эти обязательные поля
>(т.е с "битым" после них), то увидите, что никаких пустых строк
>добавленно не будет.
Верно, но заметьте, что subject, который я хотел отправить в заголовке, уже не будет в заголовке, а будет в теле письма, так как вставится пустая строка. Как я понял postfix решает что кончился заголовок по двум признакам: или при втрече пустой строки (так должно быть), или при втрече записи, которая не является заголовком (мне нужно чтобы Postfix или просто игнорировал эту строку как qmail, или хотяб оставлял, но не считал, что после этой строки идёт тело пиьсма).
>вставится пустая строка. Как я понял postfix решает что кончился заголовок
>по двум признакам: или при втрече пустой строки (так должно быть),
>или при втрече записи, которая не является заголовком (мне нужно чтобы
Да все верно.>Postfix или просто игнорировал эту строку как qmail, или хотяб оставлял,
>но не считал, что после этой строки идёт тело пиьсма).
Вы хотите неестественного интеллекта от cleanup (плюс Винема считает это нарушением RFC) - странно т.к. выше вы совершенно правильно расписали алгоритм отделения заголовка от тела.
С самим postfix'ом тут ни чего не сделать - можно только придумывать обходные пути. Например вам может помочь before-queue фильтр.
>>вставится пустая строка. Как я понял postfix решает что кончился заголовок
>>по двум признакам: или при втрече пустой строки (так должно быть),
>>или при втрече записи, которая не является заголовком (мне нужно чтобы
>Да все верно.
>
>>Postfix или просто игнорировал эту строку как qmail, или хотяб оставлял,
>>но не считал, что после этой строки идёт тело пиьсма).
>Вы хотите неестественного интеллекта от cleanup (плюс Винема считает это нарушением RFC)
Я читал RFC давно, когда ещё осваивал, что такое почта и как она работает, и не встречал, могу ошибаться, что отделение заголовка от тела проиходит не только по путой строке, но и ещё по строке, которая не похожа на поле, то бишь без двоеточия.
И почему же неестественный интелект, в коде постфикс, нужно найти участок кода, где он узнаёт, что началось тело письма, и удалить оттудова участок кода, где он считает началом тела письма, если поступает не похожая на заголовок, строка. Больше программерских знаний нужно, что бы вместо того, чтобы считать что началось тело письма, просто проигнорировать эту строку. Мне главное найти вообще этот учаток, хотябы знать в каком файле.>- странно т.к. выше вы совершенно правильно расписали алгоритм отделения заголовка
>от тела.
>С самим postfix'ом тут ни чего не сделать - можно только придумывать
>обходные пути. Например вам может помочь before-queue фильтр.Попробую разобраться с этим фильтром.
Спасибо!
>>С самим postfix'ом тут ни чего не сделать - можно только придумывать
>>обходные пути. Например вам может помочь before-queue фильтр.
>
>Попробую разобраться с этим фильтром.
>
>Спасибо!Хотя стоп, мне это не подходит... Нужно разбираться с кодом постфикс.
>>Вы хотите неестественного интеллекта от cleanup (плюс Винема считает это нарушением RFC)
>Я читал RFC давно, когда ещё осваивал, что такое почта и как
>она работает, и не встречал, могу ошибаться, что отделение заголовка от
>тела проиходит не только по путой строке, но и ещё по
>строке, которая не похожа на поле, то бишь без двоеточия.
Прочитайте еще раз 822 и 2822. Если кортоко, то
1. Про "пустую строку" не сказанно MUST
2. Формат поля заголовка:
^Field_name:[:space:](Text)?([:space:]text)?$>И почему же неестественный интелект, в коде постфикс, нужно найти участок кода,
>где он узнаёт, что началось тело письма, и удалить оттудова участок
>кода, где он считает началом тела письма, если поступает не похожая
>на заголовок, строка. Больше программерских знаний нужно, что бы вместо того,
>чтобы считать что началось тело письма, просто проигнорировать эту строку. Мне
>главное найти вообще этот учаток, хотябы знать в каком файле.
Не естественный - потому что программа не может знать битое письмо или так и задуманно. Все что делает cleanup - приводит письмо к соответсвующему RFC виду.
Если же вам неймется что-нибуть сломать - Файл cleanup_message.c>Попробую разобраться с этим фильтром.
Почему он вам не подходит???
>Если же вам неймется что-нибуть сломать - Файл cleanup_message.c
>
Поищу, правда Си я совем не знаю, программировал токо под Delphi :-(>>Попробую разобраться с этим фильтром.
>Почему он вам не подходит???
Потому, что уже будут вставлены автоматичеки строки, те, про которые вы говорили, да и не хотелось бы чтоб письмо передовалось внешнему скрипту.
>>Если же вам неймется что-нибуть сломать - Файл cleanup_message.c
>Поищу, правда Си я совем не знаю, программировал токо под Delphi :-(
Удачи желать не буду :)
Лучше постарайтесь понять, что вы ломаете логику.>>>Попробую разобраться с этим фильтром.
>>Почему он вам не подходит???
>Потому, что уже будут вставлены автоматичеки строки, те, про которые вы говорили,
Это не верно. before-queue фильтр получит "чистое письмо".>да и не хотелось бы чтоб письмо передовалось внешнему скрипту.
Такой фильтр тяжело написать скриптом (если под скриптами понимать *sh)
>>>Если же вам неймется что-нибуть сломать - Файл cleanup_message.c
>>Поищу, правда Си я совем не знаю, программировал токо под Delphi :-(
>Удачи желать не буду :)
>Лучше постарайтесь понять, что вы ломаете логику.
Я это понимаю, но ничего делать не остаётся.>>>>Попробую разобраться с этим фильтром.
>>>Почему он вам не подходит???
>>Потому, что уже будут вставлены автоматичеки строки, те, про которые вы говорили,
>Это не верно. before-queue фильтр получит "чистое письмо".
>
>>да и не хотелось бы чтоб письмо передовалось внешнему скрипту.
>Такой фильтр тяжело написать скриптом (если под скриптами понимать *sh)
не обязательно sh, тот же perl.
В общем вы имеете ввиду, что прикрутить свой фильтр, как это делается для spamassasin?З.Ы.
Помоему, чего-то Qmail не того делает. Я так понимаю, что Qmail при получении почты и раскладывании её добавляет строчку типа такой:
From user@domain.ru Wed Dec 01 22:13:36 2004 А когда пересылает эту строчку не удаляет... ЧТо за строка, чего она делает и зачем нужна QMail-у?
>Помоему, чего-то Qmail не того делает. Я так понимаю, что Qmail при
>получении почты и раскладывании её добавляет строчку типа такой:
>From user@domain.ru Wed Dec 01 22:13:36 2004 А когда пересылает эту строчку
>не удаляет... ЧТо за строка, чего она делает и зачем нужна
>QMail-у?
Почитайте mbox(5)
Но при пересылке по alias этой строки быть не должно.
>>Помоему, чего-то Qmail не того делает. Я так понимаю, что Qmail при
>>получении почты и раскладывании её добавляет строчку типа такой:
>>From user@domain.ru Wed Dec 01 22:13:36 2004 А когда пересылает эту строчку
>>не удаляет... ЧТо за строка, чего она делает и зачем нужна
>>QMail-у?
>Почитайте mbox(5)
>Но при пересылке по alias этой строки быть не должно.Ага, точно, начало письма в ящиках типа mbox. Только вот почему она при пересылки может сохраняться?!
И ещё вопросик, когда по pop3 протоколу это письмо забираешь, эта строка должна отдаваться mail-клиенту или нет?
З.Ы. В общем надо админа Qmail тормошить.
>И ещё вопросик, когда по pop3 протоколу это письмо забираешь, эта строка
>должна отдаваться mail-клиенту или нет?
Прочитайте man.
>Прочитайте man.Не нашёл ответа... :-((
>>Прочитайте man.
>Не нашёл ответа... :-((
The message is delivered without an extra UUCP-
style From_ line, without any >From quoting, and without an
extra blank line at the end. The message is normally in RFC
822 format, starting with a Return-Path line and a
Delivered-To line, but it could contain arbitrary binary
data. It might not even end with a newline.Разговор не конструктивен: вы не хотите/не способны читать
документацию - мне не интересно.
Спасибо за всё...Я и не думал, что по вопросу mailbox нужно искать ответ в man maildir. Хотя из приведённой цитаты, я так и не нашёл ответ на такой вопрос:
Если qmail хранит почту пользователя в mailbox, то pop3 сервер отдаёт строку с From bla-bla-bla mail-клиенту или нет. То есть если я забираю почту клиентом с почтового сервера, где вся почта хранится в mailbox, должен ли я увидеть уже локально у себя в заголовках писем такую строку.
А вообще за всё спасибо.
>Я и не думал, что по вопросу mailbox нужно искать ответ в
>man maildir. Хотя из приведённой цитаты, я так и не нашёл
>ответ на такой вопрос:
qmail держит почту в maildir!
Цитата была из man 5 maildir т.к. речь о qmail, но ответ есть и в man 5 mbox (причем если я верно помню, то там детально расписан алгоритм парсинга).>Если qmail хранит почту пользователя в mailbox, то pop3 сервер отдаёт строку
>с From bla-bla-bla mail-клиенту или нет. То есть если я забираю
Возьмите словарь и переведите это предложение:
The message is delivered without an extra UUCP-
style From_ line, without any >From quoting, and without an
extra blank line at the end.
Обратите внимание на "From_ line". "_" это space
>qmail держит почту в maildir!Может быть, но откудова тогда берутся строки From_, в файлах Maildir/ такого нет, по крайней мере в postfix.
>Возьмите словарь и переведите это предложение:
>The message is delivered without an extra UUCP-
>style From_ line, without any >From quoting, and without an
>extra blank line at the end.
>Обратите внимание на "From_ line". "_" это space
Поскольку эта цитата была из maildir, а в maildir нет такого признака начала письма как From_ и так понятно, что эта строка не отдаётся.Посмотрел man 5 mbox, нашёл только упоминание о том, что одним письмом в файле является всё, что от From_ до From_ или до конца файла и если удалить эти строки, то письмо будет попадать под RFС 822. Получается, что как будто бы и не должно отдаваться. Но проанализировав ранние письма которые я получал на mail.ru вижу, что эта трока поп3 клиенту отдаётся.
З.Ы. Qmail не мой, как там что натроено я не знаю. Мне нужно сделать просто чтобы мой postfix принимал письма которые редиректит по alias qmail. И вот пытаюсь разобраться что там может быть сделано не так, почему при редиректе отдаётся строка From_.
Спасибо.