Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从dovecot/postfix上的php脚本创建新的电子邮件帐户_Php_Email_Imap_Postfix Mta_Dovecot - Fatal编程技术网

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

从dovecot/postfix上的php脚本创建新的电子邮件帐户,php,email,imap,postfix-mta,dovecot,Php,Email,Imap,Postfix Mta,Dovecot,我想创建一个页面,允许人们在dovecot/postfix服务器上创建新的电子邮件帐户(通过imap) 我见过php函数imap\u open和imap\u createmailbox,但这些函数不创建帐户,只创建一个新目录:/ (您需要现有帐户的登录名/密码才能使用imap\u open。) 所以我想知道是否有可能做到这一点:) 编辑 我添加这个是因为我之前的信息不够具体。 我需要一个头版,允许用户注册一个新邮箱,并检查他们想要的邮件别名是否免费。这就是为什么大多数基于网络的管理员对我不好。我

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

我见过php函数
imap\u open
imap\u createmailbox
,但这些函数不创建帐户,只创建一个新目录:/ (您需要现有帐户的登录名/密码才能使用
imap\u open
。)

所以我想知道是否有可能做到这一点:)

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

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

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

默认情况下,postfix和dovecot从系统获取用户。这是UNIX/Linux设备上的
/etc/passwd

从PHP脚本管理这一点是可能的,但不太漂亮

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

  • 在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端,您只需在数据库中添加/删除/更新行。这可能是最好的解决方案,因为它不太复杂,但仍然相当灵活。
页面上有一些关于这个主题的“HOWTO”和


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

系统服务通常使用系统帐户(如:
/etc/passwd
),尽管这可能取决于设置,但在任何情况下,您都需要使用一些shell命令或修改系统文件/数据库。没有PHP函数可以为您执行此操作。。。已经有很多基于web的解决方案,我建议使用其中一种,而不是自己制作。请看一看,我可以使用基于web的解决方案,但不幸的是,我需要用php开发:(当心,从web服务器进行帐户管理会带来一系列安全问题。@Max为什么这会不安全?显然,你可以使其不安全,但任何帐户管理系统都是如此。我们如何设置dovecot/postfix,以便他们从MySQL或MongoDBAbout等DBMS后缀检索用户:。关于dovecot:。此外,还有一节介绍如何将这三个词绑定在一起:在页面中搜索单词“PostgreSQL”。