exim condição do arquivo de rota [fechado]

2

Usando o exim4 Eu configurei uma rota para usar um servidor SMTP externo. Estou usando o cPanel, que mantém uma lista de domínios configurados localmente no servidor no arquivo: / etc / localdomains. Como resultado, configurei uma condição para enviar somente por meio desse relé se o domínio do endereço do remetente estiver nesse arquivo. Isso funciona muito bem.

No entanto, agora quero adicionar outra condição que garanta que, se um domínio estiver listado em um arquivo, digamos / etc / norelaydomains, ele NÃO deverá ser enviado usando o relé. Eu pensei que seria fácil conseguir que isso funcionasse, adicionando uma condição semelhante à que garante que o domínio esteja em / etc / localdomains, no entanto, isso não parece funcionar corretamente (nenhum email enviado usando o relay).

Para recapitular o que eu quero é: se sender_domain for IN / etc / localdomains e sender_domain NÃO for IN / etc / norelaydomains então envie usando relay, caso contrário envie usando o servidor de e-mail local.

Minha configuração normal que funciona bem é:

my_route:
  condition = ${lookup {$sender_address_domain} \ 
lsearch {/etc/localdomains} {yes}}
  driver = manualroute
  domains = !+local_domains
  transport = my_relay
  route_list = * mysmtp.com

A configuração que eu tentei (usando isso sem e-mails passar pelo relé)

my_route:
  condition = ${lookup {$sender_address_domain} \ 
lsearch {/etc/localdomains} {yes}}
  condition = ${lookup{$sender_address_domain} \
lsearch{/etc/norelaydomains} {no}}
  driver = manualroute
  domains = !+local_domains
  transport = my_relay
  route_list = * mysmtp.com

Qualquer ajuda para fazer isso funcionar seria muito apreciada.

    
por Jacob 28.10.2014 / 21:17

1 resposta

3

Eu entendi.

Seu problema está na substituição incompleta de resultados.

${lookup{value}lsearch{file}} por padrão retorna a string encontrada ou a string vazia. Você pode modificar esse comportamento por substituição de resultados:

${lookup{value}lsearch{file}{yes}}

Essa versão retorna yes se o valor for encontrado no arquivo e a string vazia, caso contrário. Mas a avaliação de condição do exim trata como TRUE lógico apenas 'sim', 'verdadeiro' e positivos diferentes de zero. Portanto,

${lookup{value}lsearch{file}{no}}

é equivalente ao

${lookup{value}lsearch{file}{no}{no}}

Sempre. Claro, o seu roteador nunca será usado. Você precisa substituir os dois resultados explicitamente:

my_route:
  condition = ${lookup {$sender_address_domain}lsearch{/etc/localdomains} {yes}{no}}
  condition = ${lookup {$sender_address_domain}lsearch{/etc/norelaydomains} {no}{yes}}
  driver = manualroute
  domains = !+local_domains
  transport = my_relay
  route_list = * mysmtp.com
    
por 28.10.2014 / 23:24