使用 Exim 路由器和传输器进行转发

使用 Exim 路由器和传输器进行转发

我编写了两个路由器来负责我的其中一台邮件服务器的转发:

virtual_aliases_nostar:
  driver = redirect
  allow_defer
  allow_fail
  require_files = "+/var/auth/valiases/$domain"
  data = ${lookup{$local_part@$domain}lsearch{/var/auth/valiases/$domain}}
  file_transport = address_file
  group = mail
  pipe_transport = virtual_address_pipe
  retry_use_local_part
  unseen

virtual_aliases:
    driver = redirect
    allow_defer
    allow_fail
    require_files = "+/var/auth/valiases/$domain"
    data = ${lookup{*}lsearch{/var/auth/valiases/$domain}}
    file_transport = address_file
    group = mail
    pipe_transport = virtual_address_pipe
    unseen

哪些人需要进行这种运输:

virtual_address_pipe:
  driver = pipe
  group = some_user
  return_output          
  user = some_user

如果存在如下所示的 valiases/somedomain.com 文件,它将解析第一封电子邮件并转发但会在那里停止。

[email protected]: [email protected]
[email protected]: [email protected]
[email protected]: [email protected]
[email protected]: [email protected]
[email protected]: [email protected]
[email protected]: [email protected]
[email protected]: [email protected]

基本上[电子邮件保护]将被转发至[电子邮件保护]仅此而已。知道为什么会发生这种情况吗?谢谢。

答案1

您希望它做什么?您似乎希望virtual_address_pipe调用传输,但您提供的别名文件示例中没有任何管道别名……

天哪……我刚刚重读了你的问题 20 遍。我被你描述的内容与你的例子不太吻合的事实分散了注意力,因为重定向到另一个电子邮件地址不会触发 pipe_transport。我假设你的真实别名文件重定向到实际的管道,当你试图清理示例而不是发布你遇到问题的真实配置和别名文件时,它在翻译中丢失了。

无论如何,忽略这一点,我认为你的问题的答案很简单,只需将所有目标放在一行上:

[email protected]: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]

在这样的路由器中,您只需要对每个 local_part 进行一次查找。将所有目标放在一行上,Exim 将处理查找到的所有目标的重新路由/传输/等。这适用于电子邮件地址、文件和管道:

 [email protected]: /path/to/file, |/path/to/pipe, [email protected]

希望有所帮助。

相关内容