Подскажите, плз, как осуществить такую задачу:
необходимо в отдельную папку IMAP (например
/var/mail/$local_part/.INBOX.COPY) складывать копии сообщений, но без
вложений. Т.е. оригинальные сообщения должны скадлываться, как обычно, а
их копии должны складываться в отдельную папку, но уже без вложений.
Спасибо!
Есть такая тулза 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 воспринимается как ошибка?
Помогите, плз, побороть.
То есть заголовок и текстовая часть тела письма (без аттачментов
и наверно без 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
command = /usr/bin/lockf -t 3 /tmp/crime.lock /bin/sh -c "/usr/local/bin/altermime --input=- --removeall >> /path/evidence"
А каким транспортом складываются оригиналы?
>>> Как мне сделать правильно транспорт?
>> Давайте начнем с транспорта без копии.
>> Как я понимаю, это должно быть что-то вроде такого:
>>
>> 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.
Если есть способы сделать более .. ээ... кошерно, буду рад узнать о них.
Огромное СПАСИБО!
Использовать нормальный maildir доставщик (или любой другой, который
используется в системе), atermime подключать через transport_filter
--
LEFT-(UANIC|RIPE)
JID: lev...@jabber.net.ua
PGP fingerprint: 2A0B 7423 51AF B19B 74D5 31CA 2BFF 42F1 8094 7652
>> Ну, поскольку 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,"
Так работает.
Да, правда. Получилось приятнее:
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 знать. :)))