当前位置: 首页 > 工具软件 > hMailServer > 使用案例 >

hMailServer数据库结构以及加密方法,php操作mysql添加数据库

徐瑞
2023-12-01

下面先简单说一下这个服务器的一些主要的数据库表:
域名表: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);
?>

 

 类似资料: