在dovecot / postfix上从php脚本创建一个新的电子邮件帐户

时间:2014-02-17 14:25:50

标签: php email imap postfix-mta dovecot

我想创建一个页面,允许人们在dovecot / postfix服务器上创建新的电子邮件帐户(通过imap)。

我见过php函数imap_openimap_createmailbox,但这些函数不创建帐户,它只创建一个新目录:/  (并且您需要现有帐户的登录名/密码才能使用imap_open ...)

所以我想知道是否可以这样做:)。

修改

我正在添加这个,因为我之前的消息不够具体。 我需要一个首页,允许用户注册一个新邮箱,并检查他们想要的邮件别名是否是免费的。这就是为什么大多数基于网络的管理员对我不好的原因。我不希望最终用户看到管理面板。

2 个答案:

答案 0 :(得分:3)

好。答案取决于dovecot和postfix的用户帐户列表存储在服务器上的位置。即dovecot和postfix从哪里检索用户帐户。即dovecot和postfix 不维护自己的用户帐户列表,他们只需要一些现有的列表。例如,几年前我配置了dovecot和postfix,以便他们从MySQL数据库中获取用户帐户列表(以及相应的电子邮件地址,存储路径等)。在这样的实现中,只需在MySQL数据库中插入几条记录就​​可以添加新的电子邮件帐户。

我不知道你的服务器上是如何配置dovecot和postfix的。也许他们只是使用系统用户帐户(然后你需要添加useradd / adduser的用户帐户),也许他们从LDAP检索用户帐户列表(然后你需要将用户插入LDAP),或者只是从普通的配置文件(然后你需要编辑配置文件)。

答案 1 :(得分:3)

通过默认后缀& dovecot从系统中获取用户。这是UNIX / Linux机器上的/etc/passwd

可以从PHP脚本中管理它,但不是太漂亮。

  • 您可以使用posix_getpwnam检查用户名是否存在,并获取有关此用户的信息。

  • 最好在Linux上使用useradd(8)添加用户。您需要使用exec()来启动此shell实用程序。示例用法可能是:

    $pw = crypt($_POST['password'], '$6$1234567890123456'); # This should be 16 characters of random salt
    exec(sprintf('useradd --groups mailuser --no-user-group --shell nologin --password %s', escapeshellarg($pw));
    

但我不会真的推荐这个。

我建议将用户存储在SQL数据库中,例如PostgreSQL,MySQL或SQLite。这很容易设置,在PHP方面,您所要做的就是在数据库上添加/删除/更新行。这可能是最好的解决方案,因为它不是太复杂,但仍然相当灵活 postfix页面上有一些关于该主题的“HOWTO”,以及so does dovecot

Aa是最终选项,有LDAP。 LDAP更复杂,但可以说是“更好”和更好更灵活。 PHP有一个LDAP接口。