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

Команда / сценарий выбора канала exim 4 из mysql db

Есть ли возможность запустить поиск mysql в драйвере канала exim?

MYSQL_Q_SCRIPT=SELECT script FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}'
command = "${lookup mysql {MYSQL_Q_SCRIPT}{$value}

Я всегда получаю такую ​​ошибку:

"Expansion of "${lookup" from command "${lookup mysql {SELECT script FROM emails WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}'}{$value}}" in run_script transport failed: missing lookup type"

Проблема в том, что точно такой же запрос отлично работает в драйвере добавления. Так что я не вижу ошибки.

Пробелы по-разному обрабатываются в опции команды в транспорте конвейера. Перед выполнением любого расширения содержимое команды разделяется пробелами, а затем расширение выполняется по очереди для каждого элемента. Процитируем TFM:

Расширение применяется к каждому аргументу по очереди, а не ко всей строке. По этой причине любой элемент раскрытия строки, содержащий пробел, должен быть заключен в кавычки, чтобы он содержался в одном аргументе. Такая настройка, как

command = /some/path ${if eq{$local_part}{postmaster}{xx}{yy}}

не будет работать, потому что элемент раскрытия разделяется между несколькими аргументами. Ты должен написать

command = /some/path "${if eq{$local_part}{postmaster}{xx}{yy}}"

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

command = /bin/sh -c ${lookup{$local_part}lsearch{/some/file}}