Есть ли возможность запустить поиск 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}}