exim:远程 smtp 中继智能主机的密码不同

exim:远程 smtp 中继智能主机的密码不同

目前,我已将 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 错误:

  == [email protected] 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 protected]}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

有小费吗?

非常感谢

答案1

出现此问题的原因是 client_send 值是冒号分隔列表中的多个值。因此,解决问题的方法是将值格式化如下:

${lookup{$authenticated_id}lsearch{/etc/differentlogin}{remote_username}{different_username}} : ${lookup{$authenticated_id}lsearch{/etc/differentlogin}{remote_password}{different_passsword}}

相关内容