Почему .localdomain был введен в Postfix

При отправке электронной почты на моем локальном компьютере ( echo foo | sendmail $USER) электронная почта содержит файлы From: (my-user-name)@(my-machine-name).localdomain.

Согласно моим инструментам командной строки, мой хост, похоже, не имеет расширения локального домена, добавленного ни к одному из различных имен хостов, разрешенных macOS .

$ grep localdomain /etc/hosts
$ grep localdomain /Library/Preferences/SystemConfiguration/preferences.plist
$ scutil --get ComputerName
(my-machine-name)
$ scutil --get HostName
(my-machine-name)
$ scutil --get LocalHostName
(my-machine-name)
$ hostname -f
(my-machine-name)
$ alias hostname
-bash: alias: hostname: not found

Мои исследования показывают, .localdomainчто это связано с обновлением Postfix . Однако журнал Git содержит только общие сообщения, и я не смог понять из HISTORYфайла, почему он был добавлен.

  1. Кто представил .localdomainи зачем?
  2. Для каких конкретных целей это применимо, если таковые имеются? (например, следует ли использовать электронную почту Message-ID?)
См. этот ответ: apple.stackexchange.com/a/303411/119271
В конфигурации по умолчанию запуск hostnameэквивалентен запуску, hostname -fкоторый печатает machine_name.local. Проверьте любой псевдоним, определенный для него hostname, запустив alias hostname.
Спасибо за редактирование. Какова конечная цель здесь? Почему бы не настроить sendmail таким образом, чтобы он давал правильное полное доменное имя независимо от имени локального хоста?
@bmike: это для создания заголовков электронной почты, например, Message-IDпри отправке электронной почты с локального хоста. Должны ли они иметь @localhostили @localhost.localdomain? Не то чтобы это имело большое значение, мне просто стало немного любопытно, и я захотел пойти по условностям.
Отлично - надеюсь, мои правки позволят четко определить вопрос в конце «установки».

Ответы (1)

В вашем примере нет почтового клиента (кроме, возможно, echo); sendmailявляется частью агента передачи почты, который в текущих версиях macOS по умолчанию является Postfix. Postfix установит домен либо из конфигурационного файла, либо в случае неудачи какого-либо внутреннего значения или поиска системного вызова:

$ postconf | grep localdomain
mydomain = localdomain
$ postconf -n | grep "^mydomain"
$ 

Это показывает, что (по крайней мере, в моей системе) значение mydomainравно localdomainи что это значение не установлено в /etc/postfix/main.cf. Таким образом, вместо этого он должен исходить из внутреннего значения или через какой-либо системный вызов. (Вы можете установить что-то подходящее в main.cf; многие агенты передачи почты будут отклонять почту из таких локальных доменов из-за спамеров или иным образом оценивать сообщение как более вероятное для спама. Это может не быть проблемой, если электронная почта никогда не попадет в Интернет. .)

$ strings /usr/sbin/postfix | grep localdomain
localdomain
$ cfu 'char buf[254]; gethostname(buf,254); printf("%s\n",buf)'
glide.local
$ 

Показывает, что postfixможет использоваться localdomainкак внутреннее значение, так как эта строка появляется в двоичном файле. Вероятно, это связано с тем, что gethostbyname(3)возвращает что-то, чего нет localdomainв моей системе (у вас, вероятно, нет cfu, но есть много способов выполнить произвольные системные вызовы). Если загрузить исходный код Postfix , действительно есть различные ссылки на localdomain:

$ find . -name "*.c" -exec fgrep localdomain {} +
./src/global/mail_addr_find.c:    UPDATE(var_mydomain, "localdomain");
./src/global/mail_addr_find.c:    UPDATE(var_myorigin, "localdomain");
./src/global/mail_addr_find.c:    UPDATE(var_mydest, "localhost.localdomain");
./src/smtp/smtp_map11.c:    UPDATE(var_myhostname, "localhost.localdomain");
./src/smtp/smtp_map11.c:    UPDATE(var_mydomain, "localdomain");
...

Таким образом, это значение, скорее всего, будет установлено внутри Postfix, и при необходимости его следует изменить, отредактировав конфигурацию.

Очень хороший ответ, вплоть до жестко запрограммированных строк :) postconfдает мне то же, что и вы. Однако это не объясняет его корневого происхождения. Даже поиск дает лишь отдельные подсказки: google.com/search?q="localdomain ". Я помню, что локальная почта раньше имела только @localhost, поэтому предположительно она была добавлена ​​в каком-то обновлении macOS. Причина конвенции до сих пор несколько неясна. Если кто-то может пролить свет на это, это будет оценено.
Google думает, что я робот, поэтому не знаю, что показывает этот поиск. в RFC есть только две ссылки localdomain(6108 и 7123), которые особо не раскрывают того, что он существует. Я думаю, если есть репозиторий исходного кода постфикса, вы могли бы git bisectувидеть, когда эти строки были добавлены и почему?