При отправке электронной почты на моем локальном компьютере ( 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
файла, почему он был добавлен.
.localdomain
и зачем?Message-ID
?)В вашем примере нет почтового клиента (кроме, возможно, 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. Причина конвенции до сих пор несколько неясна. Если кто-то может пролить свет на это, это будет оценено.localdomain
(6108 и 7123), которые особо не раскрывают того, что он существует. Я думаю, если есть репозиторий исходного кода постфикса, вы могли бы git bisect
увидеть, когда эти строки были добавлены и почему?
Аллан
Нимеш Нима
hostname
эквивалентен запуску,hostname -f
который печатаетmachine_name.local
. Проверьте любой псевдоним, определенный для негоhostname
, запустивalias hostname
.bmike
фортрин
Message-ID
при отправке электронной почты с локального хоста. Должны ли они иметь@localhost
или@localhost.localdomain
? Не то чтобы это имело большое значение, мне просто стало немного любопытно, и я захотел пойти по условностям.bmike