Назад | Перейти на главную страницу

Ошибка 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}}

При отправке у меня в логе появляется следующая ошибка.

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}