在一个传出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}