Exim 4pipe道select命令/脚本从MySQL数据库

有没有一个选项可以在eximpipe道驱动程序中运行mysql查询?

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" 

问题是完全相同的查询在appenddriver中正常工作。 所以我没有看到这个错误。

pipe道传输中的命令选项中的空白处理方式不同。 在执行任何扩展之前,命令的内容被空白分割,然后依次对每个元素进行扩展。 引用TFM:

扩展应用于每一个论点,而不是整条线。 由于这个原因,任何包含空格的string扩展项都必须被引用以包含在单个参数中。 一个设置如

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

将无法正常工作,因为扩展项目在几个参数之间被分割。 你必须写

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

以确保这一切都在一个论点。 扩展以这种方式进行,即通过参数进行的参数,以便扩展的结果不能改变参数的数量,插入的variables中的引号或反斜杠不会与外部引用交互。 但是,如果要从单个扩展生成多个参数(或命令名称和参数),则会导致问题。 在这种情况下,最简单的解决scheme就是使用一个shell。 例如:

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