Exim MySql的Bug?

在一个传出smtp连接的身份validation器,我有这样的:

remote_login: driver = plaintext public_name = LOGIN client_send = : user : password 

这工作正常。

如果我通过以下方式切换密码:

 ${extract{auth_pass}{${lookup{$sender_address_domain}wildlsearch{/etc/exim/smtp_auths}{$value}fail}}} 

与./smtp_auths

 example.com: auth_pass=password 

这仍然有效。

mysql查询切换:

 ${lookup mysql{SELECT users.remote_secret as secret FROM users WHERE users.domain='${quote_mysql:$sender_address_domain}'}{$value}} 

发送时,日志中会出现以下错误。

推迟(-48):临时内部错误

但是使用debugging:

 [ec2-user@ip-172-31-16-5 exim]$ sudo exim -be -Mset <message-id> > ${extract{auth_pass}{${lookup{$sender_address_domain}wildlsearch{/etc/exim/smtp_auths}{$value}fail}}} password > ${lookup mysql{SELECT users.remote_secret as secret FROM users WHERE users.domain='${quote_mysql:$sender_address_domain}'}{$value}} password > 

它真的好像应该工作。 任何人之前见过这个问题?

另外,如果我切换

 ${quote_mysql:$sender_address_domain} 

 example.com 

有用。 所以我知道mysql正在工作。

我究竟做错了什么?

根据这个邮件列表发布 ,因为client_send的值是一个列表,所以在完成任何扩展之前使用:字符来分割列表,这意味着exim试图处理

 ${lookup mysql{SELECT users.remote_secret as secret FROM users WHERE users.domain='${quote_mysql` 

作为一个string和

 $sender_address_domain}'}{$value}} 

作为第二个string。

您需要将:字符加倍以便将其转义并将整个命令视为单个string:

 ${quote_mysql::$sender_address_domain}