Centos

Exim MySql 錯誤?

  • March 29, 2017

在傳出 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}}

發送時我在日誌中收到以下錯誤。

defer (-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正在工作。

我究竟做錯了什麼?

根據此郵件列表發布,因為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}

引用自:https://serverfault.com/questions/841354