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

exim: другой пароль для удаленного smtp relay smarthost

В настоящее время у меня установлена ​​конфигурация 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}}