下面先简单说一下这个服务器的一些主要的数据库表:
域名表:hm_domains,这个表保存了服务器中配置的各个域名及其相关属性;
邮件账号表:hm_accounts,这个表保存了所有的邮件账号的各项信息,如所属域名、密码、邮箱大小等;
imap服务的目录表:hm_imapfolders,这个表保存了 imap 服务的各个目录。默认情况下,每建立一个邮件账户,系统都会为这个用户添加一个 imap 目录(收件箱)
这三个表就是我们自己写管理邮件账户页面时,最常用到的表。其它的表,也很简单,如果需要的话,看一下,很容易看懂。
在表 hm_accounts 中保存的密码,不同的账户是可以使用不同的加密算法来加密的。表中保存密码的字段是:accountpassword,而这个密码所使用的加密算法由后面的一个字段的值来决定,这个字段就是:accountpwencryption。当前这个字段的值决定了密码的不同加密算法,下面是其对应关系:
0 -> 用明码来保存密码,即不对密码进行加密;
1 -> 使用 Blowfish 来加密密码。据介绍,这种加密算法并不安全,和用明码保存密码的安全性相差不大;
2 -> 使用 MD5 加密算法来加密密码;
3 -> 使用 SHA256 加密算法来加密密码。这也是 hMailServer 官方推荐的加密算法
参考资料 https://www.iteye.com/blog/lqixv-833194
邮件账号表:hm_accounts
account // id
accountdomainid = '4'; // 常规-域名ID (hm_domains表中domainid值)
accountadminlevel = '0'; // 常规-管理员级别
accountaddress = '888@111.club'; // 常规-地址
accountpassword = md5('123456'); // 常规-加密后密码
accountactive = '1'; // 常规-已启用
accountisad = '0'; // 活动目录-已启用
accountaddomain = ''; // 活动目录-域
accountadusername = ''; // 活动目录-用户名
accountmaxsize = '0'; //常规-大小
accountvacationmessageon = '0'; // 自动回复-已启用
accountvacationmessage = ''; // 自动回复-文本
accountvacationsubject = ''; // 自动回复-主题
accountpwencryption ='2'; // 帐户加密方式 0 1 2 3
accountforwardenabled ='1'; //转发-已启用
accountforwardaddress = '1@111.club'; // 转发-地址
accountforwardkeeporiginal = '1'; //转发-保留原始邮件
accountenablesignature = '0'; // 签名-已启用
accountsignatureplaintext = ''; // 签名-纯文本签名
accountsignaturehtml = ''; // 签名-HTML签名
accountlastlogontime = $time; // 常规-最后登录时间
accountvacationexpires = '0'; //自动回复-自动过期启用
accountvacationexpiredate = $time; // 自动回复-自动过期日期
accountpersonfirstname = ''; //名
accountpersonlastname = ''; // 姓
imap服务的目录表:hm_imapfolders
folderid 文件夹id
folderaccountid 邮件账号id(上表中account值)
folderparentid 文件夹父ID
foldername 文件夹名
folderissubscribed 已订阅文件夹
foldercreationtime 文件夹创建时间
foldercurrentuid 邮件id
我自己需要用PHP写一个简单的添加用户接口,PHP代码如下
<?php
$servername = "127.0.0.1";
$username = "";
$password = "";
$dbname = "";
$time = date('Y-m-d h:i:s', time());
$accountdomainid = '4'; // 常规-域名ID
$accountadminlevel = '0'; // 常规-管理员级别
$accountaddress = '888@jgdwl.cn'; // 常规-地址
$accountpassword = md5('123456'); // 常规-加密后密码
$accountactive = '1'; // 常规-已启用
$accountisad = '0'; // 活动目录-已启用
$accountaddomain = ''; // 活动目录-域
$accountadusername = ''; // 活动目录-用户名
$accountmaxsize = '0'; //常规-大小
$accountvacationmessageon = '0'; // 自动回复-已启用
$accountvacationmessage = ''; // 自动回复-文本
$accountvacationsubject = ''; // 自动回复-主题
$accountpwencryption ='2'; // 帐户加密方式 0 1 2 3
$accountforwardenabled ='1'; //转发-已启用
$accountforwardaddress = '1@jgdwl.cn'; // 转发-地址
$accountforwardkeeporiginal = '1'; //转发-保留原始邮件
$accountenablesignature = '0'; // 签名-已启用
$accountsignatureplaintext = ''; // 签名-纯文本签名
$accountsignaturehtml = ''; // 签名-HTML签名
$accountlastlogontime = $time; // 常规-最后登录时间
$accountvacationexpires = '0'; //自动回复-自动过期启用
$accountvacationexpiredate = $time; // 自动回复-自动过期日期
$accountpersonfirstname = ''; //名
$accountpersonlastname = ''; // 姓
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "INSERT INTO hm_accounts (accountdomainid, accountadminlevel, accountaddress, accountpassword, accountactive, accountisad, accountaddomain, accountadusername, accountmaxsize, accountvacationmessageon, accountvacationmessage, accountvacationsubject, accountpwencryption, accountforwardenabled, accountforwardaddress, accountforwardkeeporiginal, accountenablesignature, accountsignatureplaintext, accountsignaturehtml, accountlastlogontime, accountvacationexpires, accountvacationexpiredate, accountpersonfirstname, accountpersonlastname)
VALUES('$accountdomainid', '$accountadminlevel', '$accountaddress', '$accountpassword', '$accountactive', '$accountisad', '$accountaddomain', '$accountadusername', '$accountmaxsize', '$accountvacationmessageon', '$accountvacationmessage', '$accountvacationsubject', '$accountpwencryption', '$accountforwardenabled', '$accountforwardaddress', '$accountforwardkeeporiginal', '$accountenablesignature', '$accountsignatureplaintext', '$accountsignaturehtml', '$accountlastlogontime', '$accountvacationexpires', '$accountvacationexpiredate', '$accountpersonfirstname', '$accountpersonlastname');";
if (mysqli_query($conn, $sql)) {
echo "账号密码插入成功";
$folderaccountid = mysqli_insert_id($conn);
$sql = "INSERT INTO hm_imapfolders (folderaccountid, folderparentid, foldername, folderissubscribed, foldercreationtime, foldercurrentuid) VALUES ('$folderaccountid', '-1', 'INBOX', '1', '$time', '0')";
if (mysqli_query($conn, $sql)) { echo "收件箱插入成功";}else{echo "Error: " . $sql . "<br>" . mysqli_error($conn);}
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>