目前我将我的 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
有小费吗?
非常感谢
此问题的原因是 client_send 值是冒号分隔列表中的多个值。因此,通过将值格式化如下来解决问题的解决方案: