LINUX.ORG.RU
ФорумAdmin

Exim не доставляет почту 1 из адресатов

 


0

1

Когда я пытаюсь отправить письмо на user1@domain.tk оно отбрасывается. В почтовом логе:

2019-02-11 04:44:07 1gt3Ru-0005D1-W7 <= mailer@domain.tk H=(dev.leagues.domain.tk) [127.0.0.1] P=esmtp S=785 id=fc84d76c89fda9944c18621cfc4419ae@dev.leagues.domain.tk
2019-02-11 04:44:07 1gt3Ru-0005D1-W7 => :blackhole: <user_another@another_domain.tk> R=virtual
2019-02-11 04:44:07 1gt3Ru-0005D1-W7 Completed

Что означает этот blackhole? типа перенаправление письма на /dev/null?

В каталоге /etc/exim/virtual присутствуют несколько файлов с именами доменов:

domain.tk
another_domain.tk
и т.д.

В файле /etc/exim/virtual/another_domain.tk есть такая строка:

kev: user_another                          

Файл /etc/exim/virtual/domain.tk состоит из строчек типа:

donotreply: :blackhole:
webmaster: kev
unsubscribe: kev
webdev: webdev
kev: kev
user1: kev
user2: kev
user3: kev
*: :blackhole:

Т.е. другими словами почта адресованная user@domain.tk почему-то перенаправляется на user_another@another_domain.tk и все равно никуда не доходит...

И непонятно что означает последняя строка в файле: *: :blackhole:

В exim.conf так описан роутер virtual:

virtual:
    driver = redirect
        allow_fail
    domains = +virtual_domains
    data = ${lookup{$local_part}lsearch*{/etc/exim/virtual/$domain}}
    no_more
    pipe_transport = address_pipe

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

также в exim.conf присутствует:


domainlist local_domains = @
domainlist relay_to_domains = dsearch;/etc/exim/virtual
domainlist virtual_domains = dsearch;/etc/exim/virtual
hostlist   host_auth_accept_relay = *

gigantischer
() автор топика

видимо, * означает, что всех остальных $local_part отправлять в discard что и произошло.

anonymous
()
Ответ на: комментарий от anonymous

Когда я запустил тестирование проверки почты:

# exim -bt -d user1@domain.tk 2>&1
обнаружил такие строки:
internal_search_find: file="/etc/exim/virtual/domain.tk"
  type=lsearch key="user1"
file lookup required for user
  in /etc/exim/virtual/domain.tk
lookup yielded: kev


expanded: kev
file is not a filter file
parse_forward_list: kev
extract item: kev
virtual router generated kev@another_domain.tk
  errors_to=NULL transport=NULL
  uid=unset gid=unset home=NULL
routed by virtual router
  envelope to: user1@domain.tk
  transport: <none>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Considering kev@another_domain.tk
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing kev@another_domain.tk

Получается, что почему-то Exim не считает файл /etc/exim/virtual/domain.tk filter file и перенаправляет письмо далее на kev@another_domain.tk?

gigantischer
() автор топика
Последнее исправление: gigantischer (всего исправлений: 1)
Ответ на: комментарий от gigantischer

знаешь, у меня тоже есть екзим. и я тоже вижу выхлоп по -bt -d. и гадать по кусочкам, выдернутым из разных мест не вижу смысла.

anonymous
()
Ответ на: комментарий от anonymous
# exim -bt -d user1@domain.tk 2>&1
sender address = root@another_domain.tk
Address testing: uid=0 gid=93 euid=0 egid=93
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Testing user1@domain.tk
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Considering user1@domain.tk
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing user1@domain.tk
--------> virtual router <--------
local_part=user1 domain=domain.tk
checking domains
search_open: dsearch "/etc/exim/virtual"
search_find: file="/etc/exim/virtual"
  key="domain.tk" partial=-1 affix=NULL starflags=0
LRU list:
  5/etc/exim/virtual
  End
internal_search_find: file="/etc/exim/virtual"
  type=dsearch key="domain.tk"
file lookup required for domain.tk
  in /etc/exim/virtual
lookup yielded: domain.tk
domain.tk in "dsearch;/etc/exim/virtual"? yes (matched "dsearch;/etc/exim/virtual")
data from lookup saved for cache for +virtual_domains: domain.tk
domain.tk in "+virtual_domains"? yes (matched "+virtual_domains")
calling virtual router
rda_interpret (string): ${lookup{$local_part}lsearch*{/etc/exim/virtual/$domain}}
search_open: lsearch "/etc/exim/virtual/domain.tk"
search_find: file="/etc/exim/virtual/domain.tk"
  key="user1" partial=-1 affix=NULL starflags=1
LRU list:
  :/etc/exim/virtual/domain.tk
  5/etc/exim/virtual
  End
internal_search_find: file="/etc/exim/virtual/domain.tk"
  type=lsearch key="user1"
file lookup required for user1
  in /etc/exim/virtual/domain.tk
lookup yielded: kev
expanded: kev
file is not a filter file
parse_forward_list: kev
extract item: kev
virtual router generated kev@another_domain.tk
  errors_to=NULL transport=NULL
  uid=unset gid=unset home=NULL
routed by virtual router
  envelope to: user1@domain.tk
  transport: <none>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Considering kev@another_domain.tk
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing kev@another_domain.tk
--------> virtual router <--------
local_part=kev domain=another_domain.tk
checking domains
search_open: dsearch "/etc/exim/virtual"
  cached open
search_find: file="/etc/exim/virtual"
  key="another_domain.tk" partial=-1 affix=NULL starflags=0
LRU list:
  5/etc/exim/virtual
  :/etc/exim/virtual/domain.tk
  End
internal_search_find: file="/etc/exim/virtual"
  type=dsearch key="another_domain.tk"
file lookup required for another_domain.tk
  in /etc/exim/virtual
lookup yielded: another_domain.tk
another_domain.tk in "dsearch;/etc/exim/virtual"? yes (matched "dsearch;/etc/exim/virtual")
data from lookup saved for cache for +virtual_domains: another_domain.tk
another_domain.tk "+virtual_domains"? yes (matched "+virtual_domains")
calling virtual router
rda_interpret (string): ${lookup{$local_part}lsearch*{/etc/exim/virtual/$domain}}
search_open: lsearch "/etc/exim/virtual/another_domain.tk"
search_find: file="/etc/exim/virtual/another_domain.tk"
  key="kev" partial=-1 affix=NULL starflags=1
LRU list:
  :/etc/exim/virtual/another_domain.tk
  5/etc/exim/virtual
  :/etc/exim/virtual/domain.tk
  End
internal_search_find: file="/etc/exim/virtual/another_domain.tk"
  type=lsearch key="kev"
file lookup required for kev
  in /etc/exim/virtual/another_domain.tk
lookup yielded: kev_at
expanded: kev_at
file is not a filter file
parse_forward_list: kev_at
extract item: kev_at
virtual router generated kev_at@another_domain.tk
  errors_to=NULL transport=NULL
  uid=unset gid=unset home=NULL
routed by virtual router
  envelope to: kev@another_domain.tk
  transport: <none>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Considering kev_at@another_domain.tk
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing kev_at@another_domain.tk
--------> virtual router <--------
local_part=kev_at domain=another_domain.tk
checking domains
search_open: dsearch "/etc/exim/virtual"
  cached open
search_find: file="/etc/exim/virtual"
  key="another_domain.tk" partial=-1 affix=NULL starflags=0
LRU list:
  5/etc/exim/virtual
  :/etc/exim/virtual/another_domain.tk
  :/etc/exim/virtual/domain.tk
  End
internal_search_find: file="/etc/exim/virtual"
  type=dsearch key="another_domain.tk"
cached data used for lookup of another_domain.tk
  in /etc/exim/virtual
lookup yielded: another_domain.tk
another_domain.tk in "dsearch;/etc/exim/virtual"? yes (matched "dsearch;/etc/exim/virtual")
data from lookup saved for cache for +virtual_domains: another_domain.tk
another_domain.tk in "+virtual_domains"? yes (matched "+virtual_domains")
calling virtual router
rda_interpret (string): ${lookup{$local_part}lsearch*{/etc/exim/virtual/$domain}}
search_open: lsearch "/etc/exim/virtual/another_domain.tk"
  cached open
search_find: file="/etc/exim/virtual/another_domain.tk"
  key="kev_at" partial=-1 affix=NULL starflags=1
LRU list:
  :/etc/exim/virtual/another_domain.tk
  5/etc/exim/virtual
  :/etc/exim/virtual/domain.tk
  End
internal_search_find: file="/etc/exim/virtual/another_domain.tk"
  type=lsearch key="kev_at"
file lookup required for kev_at
  in /etc/exim/virtual/another_domain.tk
lookup failed
trying to match *
internal_search_find: file="/etc/exim/virtual/another_domain.tk"
  type=lsearch key="*"
file lookup required for *
  in /etc/exim/virtual/another_domain.tk
lookup yielded: :blackhole:
expanded: :blackhole:
file is not a filter file
parse_forward_list: :blackhole:
extract item: :blackhole:
address :blackhole:d
routed by virtual router
  envelope to: kev_at@another_domain.tk
  transport: <none>
mail to user1@domain.tk is discarded
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=21277 (main) terminating with rc=0 >>>>>>>>>>>>>>>>
gigantischer
() автор топика
Ответ на: комментарий от gigantischer

1. primary_hostname = another_domain.tk

/etc/exim/virtual/domain.tk: user1 -> kev@${primary_hostname}

2. /etc/exim/virtual/another_domain.tk: kev -> kev_at@${primary_hostname}

3. /etc/exim/virtual/another_domain.tk: kev_at -> * (:blackhole:)

anonymous
()
Ответ на: комментарий от anonymous
parse_forward_list: kev@${primary_hostname}
extract item: kev@${primary_hostname}
virtual router: defer for user1@domain.tk 
  message: error in redirect data: domain missing or malformed in "kev@${primary_hostname}"
user1@domain.tk cannot be resolved at this time: error in redirect data: domain missing or malformed in "kev@${primary_hostname}"

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

я тебе просто показываю, чему равен primary_hostname и почему так разименовываются локальные алиасы.@${primary_hostname} - это то, что подставляет exim к адресам без доменной части.

anonymous
()
Ответ на: комментарий от anonymous

а почему используется primary_hostname, если у меня явно указано в /etc/exim/virtual/domain.tk: user1 -> kev

локальному юзеру kev, а не kev@${primary_hostname}?

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

у меня секция virtual правильная:

virtual:
    driver = redirect
        allow_fail
    domains = +virtual_domains
    data = ${lookup{$local_part}lsearch*{/etc/exim/virtual/$domain}}
    pipe_transport = address_pipe
    no_more

?

gigantischer
() автор топика
Последнее исправление: gigantischer (всего исправлений: 1)
Ответ на: комментарий от gigantischer

когда я тестирую отправку письма kev@another_domain.tk в дебаге:

file lookup required for kev_at
  in /etc/exim/virtual/another_domain.tk
lookup failed
trying to match *
internal_search_find: file="/etc/exim/virtual/another_domain.tk"
  type=lsearch key="*"
file lookup required for *
  in /etc/exim/virtual/another_domain.tk
lookup yielded: :blackhole:

Хотя в файле /etc/exim/virtual/another_domain.tk есть строка:

kev: kev_at

Почему это значение не используется, а сразу переходит к последней строке в файле /etc/exim/virtual/another_domain.tk

*: :blackhole:

и письмо отбрасывается?

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

если домен виртуальный для юзеров, его не надо указывать в primary_hostname. Иначе при поиске алиасов может сработать правило для редиректов вирт доменов. Екзим при каждом проходе роутеров для емейла без домена добавляет primary_hostname в домен.

anonymous
()
Ответ на: комментарий от anonymous

УРА!!! Я указал

primary_hostname = mail.another_domain.tk

и всё зашуршало!

calling localuser router
localuser router called for kev@mail.another_domain.tk
  domain = mail.another_domain.tk
set transport local_delivery
queued for local_delivery transport: local_part = kev
domain = mail.another_domain.tk
  errors_to=NULL
  domain_data=NULL localpart_data=NULL
routed by localuser router
  envelope to: kev@mail.another_domain.tk
  transport: local_delivery
kev@mail.themapps.com
    <-- user1@domain.tk
  router = localuser, transport = local_delivery

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

Спасибки огромное, Аноним! Без тебя я бы не разобрался, честно!

gigantischer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.