Страница 1 из 1

[РЕШЕНО] ( Exim + procmail ) && "Получение статуса доставки"

Добавлено: 2010-03-01 16:56:22
erGo
Всем здрям.

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

Как екзиму отправлять в трубу с контролем и дефером, минуя процмыл, я разобрался. Как екзим отправляет в процмыл - тоже. И возник вопрос - а может ли екзим получать от процмыла статус доставки? а то не хочется несколько десятков правил портировать из процмыла в экзим :oops:

Сенкс э лот фор хелп.

Re: ( Exim + procmail ) && "Получение статуса доставки"

Добавлено: 2010-03-02 16:30:22
erGo
Нашёл нужную инфу в факе екзима:
If you want to run pipes and examine their results, you need to set up a single delivery to a delivery agent such as procmail which provides this kind of facility
Нашёл в мане процмыла, как его вызывать, чтоб он не баунсил письмо в случае ошибки, а репортовал о "временной ошибке":
-t Make procmail fail softly, i.e., if procmail cannot deliver the
mail to any of the destinations you gave, the mail will not
bounce, but will return to the mailqueue. Another delivery-
attempt will be made at some time in the future.
Нашёл и такое:
(Note: invoking procmail with the -t flag causes it to return EX_TEMPFAIL instead of EX_CANTCREAT. This would cause the message to be requeued. However, this is not generally recommended.)
Нашёл образцы, как это сделано: тута и здеся.
Сделал. Конфиги:
exim:

Код: Выделить всё

begin routers
...
procmail:
  driver = accept
  check_local_user
  local_parts = my-user
  transport = transport_pipe_procmail
  require_files = ${local_part}:${home}:${home}/.procmailrc:/usr/local/bin/procmail
  no_verify

begin transports
...
transport_pipe_procmail:
  driver = pipe
  command = "/usr/local/bin/procmail -t"
  temp_errors = *
  timeout_defer = true
  timeout = 1h
procmailrc:

Код: Выделить всё

PATH=$HOME/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/local/bin:/usr/local/sbin
MAILDIR=$HOME/Mail/             # Youd better make sure it exists
LOGFILE=$HOME/log/procmail.log
LOGABSTRACT=all
LOCKTIMEOUT=600
VERBOSE=yes
YEARM=`/bin/date +%Y-%m`

:0 H
* ^From.*MAILER-DAEMON
/dev/null

:0 c
$YEARM

:0 H
* ^To.*my-user@myhost
$HOME/log/test
На $HOME/log/test установлены права, запрещающие пользователю процмыла писать в файл. В логе процмыла ошибка светится. А лог екзима говорит - успешно доставлен.

:st: Куда ещё подскажете копать? :st:

[РЕШЕНО] ( Exim + procmail ) && "Получение статуса доставки"

Добавлено: 2010-03-03 12:17:35
erGo
Разобрался.

Код: Выделить всё

begin transports
...
transport_pipe_procmail:
  driver = pipe
  command = "/usr/local/bin/procmail -t -m /path/to/procmailrc"
  temp_errors = *
  timeout_defer = true
  timeout = 1h
Тему можно закрывать.

[offtop]
Прикольный у меня театр одного актёра получился ))
[/offtop]

Re: [РЕШЕНО] ( Exim + procmail ) && "Получение статуса доставки"

Добавлено: 2010-03-03 14:12:03
Alex Keda
бывает =)
я вообще часто вопрос пишу в форум, пока написал - понял как надо =))

Re: [РЕШЕНО] ( Exim + procmail ) && "Получение статуса доста

Добавлено: 2010-03-04 18:59:36
dikens3
Автор, напишите свою ситуацию и ваше решение в полезные скрипты.