Назад | Перейти на главную страницу

Вопрос о синтаксисе конфигурации exim4

Я пытаюсь отправить уведомление отправителю сообщения, когда сообщение отправляется ровно на один адрес в локальном домене (test@mydomain.com).

Q1: Каким будет синтаксис условия (приведенное выше не работает)? :

notify_reply:
    driver=accept
    domains = +local_domains
    senders = ! ^.*-request@.*:\
            ! ^bounce-.*@.*:\
            ! ^.*-bounce@.*:\
            ! ^owner-.*@.*:\
            ! ^postmaster@.*:\
            ! ^webmaster@.*:\
            ! ^listmaster@.*:\
            ! ^mailer-daemon@.*:\
            ! ^root@.*:\
            ! ^noreply@.*

    condition = ${if eq {$received_for}{test@mydomain.com}}

    no_expn
    transport=notify_transport
    unseen
    no_verify

Q2: Как написать многострочную строку в конфигурационном файле для "текста"? :

notify_transport:
    driver=autoreply
    from=info@mydomain.com
    to=$sender_address
    subject=Your mail for
    text="Please resend your messasge to

info@mydomain.com

This is a temporary modification."

В1: условия работают со строками «истина» / «да» или «нет» / «ложь», поэтому вы должны сделать конечный результат ваших расширений одной из этих строк. Точно так же ${if не возвращает абсолютную истину или ложь, он оценивает утверждение, а затем возвращает строки на основе истинности утверждения (вы оставили эти строки отключенными). Вот пример:

g3 0 /home/jj33 > exim -be
> ${if eq{string}{string}{true}{false}}
true
> ${if eq{string}{STRING}{true}{false}}
false
> ${if eqi{string}{STRING}{true}{false}}
true
>

Важно отметить, что строки «истина» и «ложь» произвольны, вы ${if может возвращать любое значение, но наиболее полезны здесь true и false. Anyhoo, в зависимости от перечисленного вами условия, я бы изменил его на это:

condition = ${if eq {$received_for}{test@mydomain.com}{yes}{no}}

РЕДАКТИРОВАТЬ: Я думаю, что более новые версии exim могут не требовать дополнительных частей «if-true» и «if-false», поэтому я могу лаять здесь не на то дерево. Я думаю, что $ receive_for, вероятно, на самом деле не та переменная, которую вы хотите, я сомневаюсь, что она что-то содержит в то время, когда вы запускаете этот маршрутизатор. Вместо этого попробуйте следующее:

condition = ${if eqi{$local_part@$domain}{test@mydomain.com}}

Q2: Есть несколько способов решить эту проблему, но мне нравится использовать оператор $ {expand::

g3 0 /home/jj33 > exim -be
> ${expand:line1\nline2}
line1
line2

Итак, в вашем случае это будет:

text=${expand:Please resend your messasge to\n\ninfo@mydomain.com\n\nThis is a temporary modification.}