получить электронную почту по умолчанию от пользователя на коробке Linux - PullRequest
5 голосов
/ 11 ноября 2009

Есть ли способ программно получить адрес электронной почты текущего пользователя? Я знаю, что электронная почта обычно - user @ hostname, но я могу получить электронную почту? Я знаю, как получить имя пользователя и имя хоста, чтобы я мог создать его сам, но я хочу быть уверен, что получу адрес электронной почты, даже если он не user@hostname.

Код в C приветствуется.

Спасибо

Ответы [ 10 ]

5 голосов
/ 11 ноября 2009

Нет такого стандартного сопоставления учетной записи пользователя с адресом электронной почты - по крайней мере, для обычных учетных записей, полученных из / etc / passwd. Учтите, что у пользователя может даже не быть адреса электронной почты.

3 голосов
/ 26 июля 2014

Никто не упомянул поля GECOS в файле / etc / passwd.

Вы заметите, что пятое поле в вашей записи в / etc / passwd либо пустое, либо список через запятую, первым элементом которого является ваше полное имя. Первоначально в Bell Labs (до дней электронной почты) поля GECOS были:

  1. Полное имя пользователя (или имя приложения, если учетная запись предназначена для программа)
  2. Номер здания и комнаты или контактное лицо
  3. Офисный телефон номер
  4. Любая другая контактная информация (номер пейджера, факс и т. Д.)

Некоторые дистрибутивы Linux хранят адрес электронной почты пользователя по умолчанию в 4-м поле GECOS, и если ваша система не делает этого по умолчанию, вы можете настроить его самостоятельно. Обычные пользователи без привилегий суперпользователя могут редактировать свои поля GECOS, используя команду командной строки chfn . Чтобы получить доступ к этому полю, вы можете сделать

grep ${USER}: /etc/passwd | awk -F\: '{print $5}' | awk -F\, '{print $4}'

или что-то еще плавает на вашей лодке на выбранном вами языке (Нет, я НЕ напишу C. Это двадцать первый век!).

3 голосов
/ 11 ноября 2009

Не существует стандартного сопоставления учетных записей пользователей с адресами электронной почты RFC822 (т.е. user @ domain). Как правило, стандартные настройки агентов передачи почты по умолчанию принимают локальную почту на адреса без домена и доставляют ее в учетную запись пользователя с тем же именем. Но даже на это нельзя полагаться, поскольку у вас может даже не быть MTA.

2 голосов
/ 12 ноября 2009

UNIX способ сделать это - отправить электронную почту через локального агента переноса почты - достаточно просто вызвать /usr/bin/mail. Системный администратор отвечает за настройку локального MTA для обеспечения правильной работы электронной почты.

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

  • Если вы просто хотите использовать правильный адрес электронной почты «от» при отправке электронной почты от имени локального пользователя, чтобы они получали ответы в нужном месте - опять же, просто используйте свое имя пользователя. MTA должен быть настроен для правильного перевода.

Этот способ работы хорош, потому что это означает, что эту конфигурацию нужно выполнять только в одном месте (MTA), а не настраивать вручную каждое отдельное приложение в ящике, который отправляет или получает электронную почту.

1 голос
/ 11 ноября 2009

Зависит от того, как хранится пользователь. В простом файле passwd нет адреса электронной почты, только имя пользователя. Но вы можете получить дополнительную информацию с помощью другого метода аутентификации, такого как LDAP или SQL.

0 голосов
/ 21 ноября 2018

Просто для дополнения Ответ Саймона и, учитывая, что у меня недостаточно репутации, чтобы комментировать его, GECOS означает Общая комплексная операционная система aka General Electric - всесторонний операционный супервизор и самый портативный способ получения пользовательского поля GECOS (поскольку он может быть не определен в вашем файле /etc/passwd напрямую в зависимости от конфигурации вашей системы):

getent passwd <USERNAME> | awk -F ':' '{print $5}'

0 голосов
/ 10 апреля 2015

Попробуйте перейти в / var / mail /, и там у вас должен быть файл для каждого пользователя, который имеет (не у всех пользователей должен быть) адрес электронной почты. И вы действительно можете прочитать почту из этих файлов.

Затем вы можете перенаправить почту куда-либо еще с помощью инструмента sendmail.

0 голосов
/ 08 декабря 2013

Проверьте используемый вами терминал, то есть:

корень @ питер-ноутбук #

для root пользователей отображается перед знаком #, то есть

root@peter-laptop или peter@peter-laptop# для пользователя peter

0 голосов
/ 11 ноября 2009

Вы не можете получить действительный адрес электронной почты стандартным способом. Я бы попробовал отправить письмо на username. Изменения в том, что он попадет в правильный домен, на самом деле не так уж и плохи ...

0 голосов
/ 11 ноября 2009

Запрашивает у пользователя адрес электронной почты. Если у вас нет гарантии, что адресом электронной почты является user @ hostname, то как еще вы можете определить, что это за электронная почта, кроме как спрашивать их?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...