[Exim-rusers] Вырезать аттачи в копии сообщения.

64 views
Skip to first unread message

Yaroslav

unread,
Jul 28, 2009, 3:51:50 AM7/28/09
to exim-...@exim.org.ua
Здравствуйте!

Подскажите, плз, как осуществить такую задачу:
необходимо в отдельную папку IMAP (например
/var/mail/$local_part/.INBOX.COPY) складывать копии сообщений, но без
вложений. Т.е. оригинальные сообщения должны скадлываться, как обычно, а
их копии должны складываться в отдельную папку, но уже без вложений.

Спасибо!

Yaroslav

unread,
Jul 29, 2009, 12:34:43 PM7/29/09
to CIS Exim users mailing list

Есть такая тулза altermime, которая может заменять вложения, удалять их.
Например, с параметром --removeall аттачи будут удалены, а с параметром
--input=- сообщение может быть передано этой тулзе через pipe.
Следовательно, команда altermime --input=- --removeall .
Как мне сделать правильно транспорт?
Давайте начнем с транспорта без копии.
Как я понимаю, это должно быть что-то вроде такого:

remove_attach_transport:
driver = pipe
command = "/usr/local/bin/altermime --input=- --removeall"
user = $local_part
group = mail
initgroups
return_output
ignore_status

Я правильно понимаю?
При отправке сообщения генерируется ответ об ошибке.
Т.е. результат работы программы altermime воспринимается как ошибка?
Помогите, плз, побороть.

Le...@lena.kiev.ua

unread,
Jul 29, 2009, 1:23:43 PM7/29/09
to CIS Exim users mailing list
> Как мне сделать правильно транспорт?
> Давайте начнем с транспорта без копии.
> Как я понимаю, это должно быть что-то вроде такого:
>
> remove_attach_transport:
> driver = pipe
> command = "/usr/local/bin/altermime --input=- --removeall"
> user = $local_part
> group = mail
> initgroups
> return_output
> ignore_status
>
> Я правильно понимаю?
> При отправке сообщения генерируется ответ об ошибке.
> Т.е. результат работы программы altermime

То есть заголовок и текстовая часть тела письма (без аттачментов
и наверно без HTML), которые выводятся в stdout, так?

> воспринимается как ошибка?

Ну вы же сами написали return_output.

> Помогите, плз, побороть.

Например (теоретически),
command = /bin/sh -c "/usr/bin/lockf -t 3 /tmp/crime.lock /usr/local/bin/altermime --input=- --removeall >> /path/evidence"

_______________________________________________
exim-users mailing list
exim-...@exim.org.ua
http://exim.org.ua/mailman/listinfo/exim-users

Le...@lena.kiev.ua

unread,
Jul 29, 2009, 1:27:20 PM7/29/09
to CIS Exim users mailing list
Точнее, лучше так:

command = /usr/bin/lockf -t 3 /tmp/crime.lock /bin/sh -c "/usr/local/bin/altermime --input=- --removeall >> /path/evidence"

Le...@lena.kiev.ua

unread,
Jul 29, 2009, 1:47:52 PM7/29/09
to CIS Exim users mailing list
> > Подскажите, плз, как осуществить такую задачу:
> > необходимо в отдельную папку IMAP (например
> >/var/mail/$local_part/.INBOX.COPY) складывать копии сообщений

А каким транспортом складываются оригиналы?

Yaroslav

unread,
Jul 29, 2009, 5:45:32 PM7/29/09
to CIS Exim users mailing list
On Wed, 29 Jul 2009, Le...@lena.kiev.ua wrote:

>>> Как мне сделать правильно транспорт?
>> Давайте начнем с транспорта без копии.
>> Как я понимаю, это должно быть что-то вроде такого:
>>
>> remove_attach_transport:
>> driver = pipe
>> command = "/usr/local/bin/altermime --input=- --removeall"
>> user = $local_part
>> group = mail
>> initgroups
>> return_output
>> ignore_status
>>
>> Я правильно понимаю?
>> При отправке сообщения генерируется ответ об ошибке.
>> Т.е. результат работы программы altermime

> То есть заголовок и текстовая часть тела письма (без аттачментов
> и наверно без HTML), которые выводятся в stdout, так?

>> воспринимается как ошибка?

> Ну вы же сами написали return_output.

Да, точно. Я уже столько всего перепробовал, что просто устал и надеялся,
что эта опция просто возвращает результат от исполнения внешнего фильтра в
сообщение. Сейчас понимаю, что бред, но всё же.

>> Помогите, плз, побороть.

> Например (теоретически),
> command = /bin/sh -c "/usr/bin/lockf -t 3 /tmp/crime.lock /usr/local/bin/altermime --input=- --removeall >> /path/evidence"

Гениально!
Все получилось!
Огромное спасибо!
Вот результат:

shortcopy_router:
driver = accept
check_local_user
transport = shortcopy_transport
no_verify
no_expn
unseen
condition = "${if {exists{/var/mail/$local_part/.INBOX.SHORT}} {yes} {no} }"

shortcopy_transport:
driver = pipe
command = /usr/bin/lockf -t 3 /var/tmp/crime.lock /bin/sh -c "/usr/local/bin/altermime --input=- --removeall >> /var/mail/$local_part/.INBOX.MOBILE/cur/`date +%s`.$message_id.$primary_hostname:2,S"
return_path_add
delivery_date_add
envelope_to_add


user = $local_part
group = mail
initgroups

ignore_status

Основное сообщение складывается стандартным транспортом local_delivery.

Если есть способы сделать более .. ээ... кошерно, буду рад узнать о них.

Огромное СПАСИБО!

Le...@lena.kiev.ua

unread,
Jul 29, 2009, 5:46:31 PM7/29/09
to CIS Exim users mailing list
Ну, поскольку maildir, то lockf не нужно.
command = /bin/sh -c "/usr/local/bin/altermime и так далее.
lockf нужно только если многие письма добавляются
в конец одного и того же файла.

Mykola Dzham

unread,
Jul 29, 2009, 6:13:24 PM7/29/09
to CIS Exim users mailing list
> Гениально!
> Все получилось!
> Огромное спасибо!
> Вот результат:
>
> shortcopy_router:
> driver = accept
> check_local_user
> transport = shortcopy_transport
> no_verify
> no_expn
> unseen
> condition = "${if {exists{/var/mail/$local_part/.INBOX.SHORT}} {yes} {no} }"
>
> shortcopy_transport:
> driver = pipe
> command = /usr/bin/lockf -t 3 /var/tmp/crime.lock /bin/sh -c "/usr/local/bin/altermime --input=- --removeall >> /var/mail/$local_part/.INBOX.MOBILE/cur/`date +%s`.$message_id.$primary_hostname:2,S"
> return_path_add
> delivery_date_add
> envelope_to_add
> user = $local_part
> group = mail
> initgroups
> ignore_status
>
> Основное сообщение складывается стандартным транспортом local_delivery.
>
> Если есть способы сделать более .. ээ... кошерно, буду рад узнать о них.

Использовать нормальный maildir доставщик (или любой другой, который
используется в системе), atermime подключать через transport_filter

--
LEFT-(UANIC|RIPE)
JID: lev...@jabber.net.ua
PGP fingerprint: 2A0B 7423 51AF B19B 74D5 31CA 2BFF 42F1 8094 7652

Yaroslav

unread,
Jul 29, 2009, 6:36:00 PM7/29/09
to CIS Exim users mailing list
On Thu, 30 Jul 2009, Le...@lena.kiev.ua wrote:

>> Ну, поскольку maildir, то lockf не нужно.
> command = /bin/sh -c "/usr/local/bin/altermime и так далее.
> lockf нужно только если многие письма добавляются
> в конец одного и того же файла.

Ну да, логично.

Но у меня вылез глюк. В IMAP-папке появляется сообщение, но битое.
Т.е. почтовая программа видит запись о нем есть, но информации(от кого,
куда, тело) нет.
Если почтовая программа следит за обновлениями в этой папке, то она
успевает увидеть файл сообщения еще до того, как все данные в него
сольются. Потому решил немного усложнить команду:


command = /usr/bin/lockf -t 3 /var/tmp/crime.lock \

/bin/sh -c "/usr/local/bin/altermime --input=- --removeall \
>> /var/tmp/exim/$message_id ; \
mv /var/tmp/exim/$message_id /var/mail/$local_part/.INBOX.SHORT/cur/`date +%s`.$primary_hostname:2,"

Так работает.

Yaroslav

unread,
Jul 29, 2009, 6:43:23 PM7/29/09
to CIS Exim users mailing list

Да, правда. Получилось приятнее:

shortcopy_transport:
driver = appendfile
delivery_date_add
directory = /var/mail/$local_part/.INBOX.SHORT
transport_filter = /usr/local/bin/altermime --input=- --removeall
maildir_format
create_directory
envelope_to_add
return_path_add
group = mail
user = $local_part

Где-то так я и хотел изначально.
Так, глядишь, с вашей помощью скоро буду exim знать. :)))

Reply all
Reply to author
Forward
0 new messages