Exim MySql 错误?

Exim MySql 错误?

在传出 smtp 连接的身份验证器中我有以下内容:

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):临时内部错误

但使用调试:

[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 正在运行。

我究竟做错了什么?

答案1

根据此邮件列表帖子,因为client_send的值是一个列表,所以:在进行任何扩展之前,这些字符用于拆分列表,这意味着 exim 正在尝试处理

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

作为一个字符串和

$sender_address_domain}'}{$value}}

作为第二支球队。

您需要将:字符加倍才能将其转义,并将整个命令视为单个字符串:

${quote_mysql::$sender_address_domain}

相关内容