2009-11-11 56 views
5

有没有什么办法以编程方式获取当前用户的电子邮件地址? 我知道电子邮件通常是用户@主机名,但有没有我可以得到的电子邮件? 我知道如何获取用户名和主机名,以便我可以自己构建它,但是我想确保即使电子邮件不是user @ hostname,我也能得到电子邮件地址。在Linux机器上获取用户的默认电子邮件

C代码表示赞赏。

谢谢

+0

即使你花费了所有的努力来解析各种配置文件来确定电子邮件地址,很可能用户将拥有多个帐户,你必须提示他们选择。更好的问题可能是如何验证所选的电子邮件地址。 – NVRAM 2009-11-11 17:10:43

回答

5

有用户帐户没有这样的标准映射电子邮件地址 - 至少不是普通的/ etc/passwd文件导出账户。考虑到用户可能甚至没有电子邮件地址。

+1

感谢您的直接答复。 – Uri 2009-11-11 16:49:56

0

提示用户输入他们的电子邮件。如果您不能保证电子邮件是user @ hostname,那么除了询问他们之外,您还希望确定他们的电子邮件是什么?

+0

也许它保存在一些配置文件中。我不知道,这就是我在这里问的原因。 感谢您的回答,但我不能问用户,因为程序是一个守护进程 – Uri 2009-11-11 16:34:29

+0

说它在配置文件中完全改变了问题。现在您已经从“如何根据系统特征确定用户的电子邮件地址?”到“如何读取配置文件?”,根据是否要手动解析这样的文件或使用现有的库,答案会有所不同。另外,你是否想要默认配置文件中的值并回退到user @ hostname的环境值?明确的问题有助于得到明确的答案:) – jamessan 2009-11-11 16:41:33

+2

我认为他意味着一个现有的配置文件,恰好包含他可以使用的电子邮件地址。但是没有任何这样的配置文件。 – 2009-11-11 16:44:06

2

没有用户帐户到RFC822(即用户@域)电子邮件地址的标准映射。通常,典型邮件传输代理的默认设置将接受本地邮件到没有域的地址,并将其传送到同名的用户帐户。但即便如此,也不能依赖,因为你甚至可能没有MTA。

+1

没有办法**从本地机器上的软件配置中派生**,很明显,有一种方法可以获得它:向某人(用户,管理员)询问该盒上用户的电子邮件配置。 – 2009-11-11 16:52:33

1

这取决于用户的存储方式。在一个简单的passwd文件中,没有电子邮件地址,只有一个用户名。但是您可以使用其他身份验证方法(如LDAP或SQL)获得其他信息。

+0

好的。任何方式我可以用这个来获取电子邮件? – Uri 2009-11-11 16:41:33

+0

就像我说的,这取决于。在unix帐户中没有默认电子邮件“选项”。 uri @ hostname仅表示“地址主机名上的用户uri”。 – Procule 2009-11-11 16:51:07

+0

但是,假设您正在对LDAP服务器(OpenLDAP,Active Directory等)进行身份验证,则您可以使用ldap客户端库检索的电子邮件选项。 – Procule 2009-11-11 16:53:03

0

你不能在任何标准的方式获得实际的电子邮件地址。我会尝试发送邮件到username。 Chanses,它最终会在正确的域名其实并不坏......

+0

我知道这一点。谢谢 – Uri 2009-11-11 16:46:17

2

这样做的UNIX方式是通过本地邮件传输代理发送邮件 - 简单地调用/usr/bin/mail就足够了。系统管理员负责配置本地MTA,以确保邮件正常工作。

  • 如果你想发送电子邮件给本地用户,只需将其发送给他们的用户名 - 如果他们读他们的电子邮件比当地其他地方,则MTA应配置将其转发给他们。

  • 如果您只是想代表本地用户发送电子邮件时使用正确的“from”电子邮件地址,那么他们会在正确的位置获得回复 - 再次使用他们的用户名。该MTA应配置做正确的翻译。

做事的方式是很好的,因为这意味着这个配置只在一个地方(MTA)来完成,而不必手动配置上发送或临危盒每一个应用程序电子邮件。

3

没有人提到/ etc/passwd文件中的GECOS字段。

您会注意到,您在/ etc/passwd项目中的第五个字段为空或逗号分隔的列表,其中的第一个元素是您的全名。原本在贝尔实验室(电子邮件天之前)GECOS领域是:

  1. 用户的全名(或应用程序的名称,如果该帐户是 程序)
  2. 大厦和房间号或联系人
  3. 办公室电话号码
  4. 任何其他联系信息(寻呼机号码,传真等)

一些Linux发行版存储用户的默认电子邮件在第4个GECOS字段中的地址,如果你的系统默认不这样做,你可以自己设置它。没有超级用户权限的普通用户可以使用命令行命令chfn编辑他们的GECOS字段。要进入这个领域,你可以再做

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

或任何你的船浮筒在您所选择的语言(不,我不写C.这是二十一世纪!)。

+1

我只是建议更改“grep $ {USER}/etc/passwd”为“getent passed $ {USER}”,以允许查找其他NSS源(如LDAP)中的用户。 – Stephen 2014-12-07 10:52:43

0

尝试访问/ var/mail /并且您应该为每个拥有(并非所有用户都必须拥有它)电子邮件地址的用户提供一个文件。你确实可以从这些文件中读取邮件。

然后,您可以使用sendmail工具将邮件重定向到其他任何地方。

相关问题