В настоящее время у меня установлена конфигурация exim для отправки всех писем с использованием внешнего SMTP-сервера. Все пользователи проходят аутентификацию на моем сервере exim с локальным паролем, а затем отправляемые сообщения ретранслируются через смарт-хост на удаленный SMTP-сервер, который использует другой логин по сравнению с тем, который используется непосредственно пользователями, подключенными к моему серверу exim (работает cPanel) . Вот текущая конфигурация:
remote_route:
driver = manualroute
domains = !+local_domains
transport = remote_transport
route_list = * remotesmtpserver.com
remote_transport:
driver = smtp
port = 587
hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address
remote_login:
driver = plaintext
public_name = LOGIN
hide client_send = : remote_username : remote_password
Все это работает хорошо и по назначению.
Проблема в том, что я хочу использовать разные remote_username и remote_password для выбранной группы пользователей / отправителей. Имена для входа (для моего сервера exim) являются полными адресами электронной почты, поэтому я добавил эти адреса электронной почты в файл / etc / differentlogin (т.е. список адресов электронной почты, разделенных новой строкой).
Затем я попробовал выполнить следующие настройки в разделе remote_login:
remote_login:
driver = plaintext
public_name = LOGIN
hide client_send = ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{: different_username : different_passsword}{: remote_username : remote_password}
Однако это дает мне следующую ошибку EXIM при попытке отправить электронное письмо:
== to@address.com R=remote_route T=remote_transport defer (-48): expansion of "${lookup{$authenticated_id}lsearch{/etc/differentlogin}{" failed in mandrill_login authenticator: missing } at end of string
Я попытался использовать $ sender_address вместо $ authenticated_id, но это дало мне тот же результат.
Я также попытался заменить переменную для поиска строкой, то есть:
remote_login:
driver = plaintext
public_name = LOGIN
hide client_send = ${lookup{email@domain.com}lsearch{/etc/differentlogin}{: different_username : different_passsword}{: remote_username : remote_password}
но я все равно получаю ту же ошибку.
Чтобы проверить синтаксис моего условного оператора, я попытался добавить в свой remote_transport следующее:
headers_add = X-SenderTest: ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{different}{normal}}
Это работает так, как ожидалось, и добавляет следующий заголовок при отправке электронной почты с адресов / логинов, указанных в списке / etc / differentlogin
X-SenderTest: different
Какие-нибудь советы?
Большое спасибо
Причина этой проблемы в том, что значение client_send - это количество значений в списке, разделенном двоеточиями. Таким образом, решение проблемы устраняется форматированием значения, как показано ниже:
${lookup{$authenticated_id}lsearch{/etc/differentlogin}{remote_username}{different_username}} : ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{remote_password}{different_passsword}}