Назад | Перейти на главную страницу

Как сделать так, чтобы sendmail уважал нотацию + для виртуальных пользователей?

У меня разные потребности в пересылке для разных доменов, и все они указывают на мой почтовый сервер:

user1@example.com   foo@example.org
user2@example.com   bar@example.net
@example.com        mylocalaccount

Все это работает ... Однако некоторые из этих пользователей хотят использовать нотацию +, чтобы дать разным поставщикам разные адреса, например user1+продавец@example.com. И эта часть не работает - все такие электронные письма в конечном итоге доставляются в общий центр. mylocalaccount вместо того, чтобы быть перенаправленным должным образом.

Как мне сделать user+foo@example.com быть отправленным в тот же пункт назначения, что и user@example.com?

Я пробовал добавлять записи вроде

user1+*@example.com    foo+%2@example.org

но это не устранило проблему ...

Вот следы отладки:

Без подробностей:

% sendmail -d60.5 -bv g@example.com
map_lookup(dequote, me, %0=me) => NOT FOUND (0)
map_lookup(dequote, g, %0=g) => NOT FOUND (0)
map_lookup(virtuser, g@example.com, %0=g@example.com, %1=g) => gexample@example.net (0)

... работает.

С деталями:

% sendmail -d60.5 -bv g+meow@example.com
map_lookup(dequote, me, %0=me) => NOT FOUND (0)
map_lookup(dequote, g+meow, %0=g+meow) => NOT FOUND (0)
map_lookup(virtuser, g+meow@example.com, %0=g+meow@example.com, %1=g+meow) => NOT FOUND (0)
map_lookup(virtuser, @example.com, %0=@example.com, %1=g+meow) => me (0)
map_lookup(dequote, me, %0=me) => NOT FOUND (0)
map_lookup(user, me, %0=me) => me<> (0)
g+meow@example.com... deliverable: mailer local, user me

... не работает - приходит на всеохватывающий локальный аккаунт "я".

Если вы хотите, чтобы виртуальный сервер перенаправлял с + сохранением деталей затем попробуйте:

# use %2 if you want to strip EMPTY +detail (user+@example.net)
user1@example.com   foo%3@example.org

Процедура отладки
Как root выполнить sendmail -d60.5 -bv user1+x@example.net.
Он должен отслеживать поиск по карте, включая виртуальный поиск по карте.
Пытаться sendmail -d21.12 -d60.5 -bv user1+x@example.net if + detail удаляется перед виртуальным поиском.

user1+detail@example.com по умолчанию должен заставить sendmail искать следующие виртуальные записи:

  1. user+detail@example.com
  2. user++@example.com
  3. user+*@example.com
  4. user@example.com
  5. ++@example.com
  6. +*@example.com
  7. @ example.com

user+@example.com (плюс присутствует, но деталь пуста) выполняет поиск 1 + 3 + 4 + 6 + 7
user@example.com (нет + детали присутствуют) поиск по condutcs 4 + 7

Кажется, что + отсутствует в OperatorChars в твоем sendmail.cf. Это делает R линии в sedmail.cf увидеть один токен user+detail вместо трех жетонов user + detail.

sendmail.cf генерируется из sendmail.mc должен установите OperatorChars на .:%@!^/[]+ по умолчанию в соответствии с книга летучих мышей. Его можно изменить в файле MC, указав confOPERATORS.

Проверьте, что сообщает grep OperatorChars /etc/mail/sendmail.cf