hMailServer自建邮箱系统

标签: 无 分类: 未分类 创建时间:2021-02-01 05:35:18 更新时间:2024-12-03 13:01:37

hMailServer是一个免费的邮件系统,可以通过自定义域名,然后创建自己的个性的邮箱,比如:bibichuan@bibichuan.com

1.安装

下载安装,设置外接sql,这个都是挺简单的,就不介绍了,双击安装程序,下一步,下一步,下一步配置相关的数据库就可以了。主要讲一下安装完成之后需要设置哪些内容。

参考文章:
1.hmailserver (官网)
3.hMailServer安装使用教程

DNS解析设置

域名解析看起来挺复杂的,其实我总结了一下,也挺简单的。

(1) 在阿里云中添加域名解析,记录类型为A的记录mail地址指向hmailserver服务器安装地址,比如:mail.bibichuan.com

(2) 记录类型为Mx的主机记录@指向mail域名,记录类型为CNAME的smtp和pop3,也同样指向mail设置的域名

(3) hmailserver服务器开启25、110、143、587 端口

DKIM设置

这个设置不是必须的,设置了之后就是不让其他的邮箱系统,认定为垃圾邮箱。

参考文章:
1.给hMailServer添加DKIM图文教程 下载openssl,生成公钥和私钥,域名管理添加txt纪录, 记录头为hmail._domainkey (hmail可以随你填),记录值为k=rsa; p=生成的rsa.public中的内容
2.Openssl生成自签名证书,简单步骤
3.如何将openssl生成key格式转换成ssh-keygen格式 因为好奇,所以查了下ssh-keygen生成的密钥和openssl生成的密钥的不同以及相互转化过程

2.忘记管理员密码

3.修改密码

打开hmailServer服务端,选择需要修改密码的邮箱账号,然后在Password一栏中填入新的密码就可以了。

参考文章:
1.hmailserver帐号密码修改代码 (没啥用,用不着编程)
2.hmailserver自行设置密码 (好像也是需要一个插件,没用到)
3.hmailserver 通过 webmail 修改密码 (通过webmail进行密码修改)
4.hMailServer之允许用户自己修改密码 (这里是允许用户自己修改密码,而不是通过hmailServer管理控制台)
5.hmailserver设置用户账户密码加密类型 (实现不同加密类型)

4.Foxmail收发邮件

新建了自己的邮箱之后,需要有客户端进行邮件的收发,这里我选择了Foxmail。

4.1.新建账号

打开Foxmail客户端,右侧的菜单栏,下拉之后,选择账号管理,然后选择新建

4.2.设置协议

点击创建,然后选择接收服务器类型为pop3,其他的默认,点击创建,就可以了。

5.可以接收右键,但是无法发送邮件

借助于Foxmail客户端,可以正常的接收邮件,但是使用Foxmail却无法发送邮件,虽然Foxmail发送邮件的时候显示发送成功了,但是对方的邮箱没有收到,无论是外部邮箱还是内部邮箱都不可以。

日志错误信息有如下内容:
(1) DNS - Query failure. Treating as temporary failure,”Could not retrieve PTR record for IP (false)!

尝试了以下的方法:
(1) 查看日志,打开hMailServer Administrator管理控制台->Settings->Logging->Show Logs,可以打开日志文件夹,查看具体日期的日志。

(2) 关闭Auto-ban,打开hMailServer Administrator管理控制台->Settings->Advanced->Auto-ban,取消Enabled选中。

(3) 修改计算机的DNS,打开网络设置->选择网络->打开网络设置属性,将DNS改为223.5.5.5。

(4) 删除IP Ranges中的Auto-ban,打开hMailServer Administrator管理控制台->Settings->Advanced->IP Ranges,将Auto-ban进行删除

(5) 清空DNS缓存,右键以管理员身份打开cmd,输入以下命令

1
2
3
4
## 显示dns
ipconfig /displaydns
## 清空dns缓存
ipconfig /flushdns

(6) 修改SMTP的host name,打开hMailServer Administrator管理控制台->Settings->Protocols->SMTP,修改Local host name。

比较奇怪的是,hMailServer不能往外发送邮件,比如不能发送邮件到QQ、163等邮箱,但是可以部分往内网发送,比如同样是HMailServer上的账号,就可以互发消息,更加奇怪的是,并不是所有的内网都可以发送邮件,有部分邮件无法发送,比如同是hMailServer的账号wechat6@和wechat7@、wechat8@,PM@,可以向wechat7@、wechat8@发送邮件,但是发送给wechat6@的邮件,wechat6就是收不到。

参考文章:
1.hmailserver 能收到无法发送发外部邮件 (这里又有个人说是DNS问题,以及Auto-ban的问题)
2.IP range
3.hMailServer SSL 配置
4.DnsQuery return value: 9002
5.windows下如何查看以及清除DNS缓存 使host立即生效
7.SMTP settings (这里是SMTP的设置)
8.hMailServer and reverse DNS (这里有一个答案就是Under SMTP Settings >> Hostname,设置DNS)
9.无法获取PTR记录,邮件延迟几小时

(7) queue next try “as soon as possible”
在hMailSerer->Status->Delivery queue,发送队列Next try,显示的是:As soon as possible。

右键邮件,选择立即发送,还是发送不了。

(8) 进行Utilties->Diagnostics进行诊断,没有什么问题。

(9) 进行内网发送邮件,只发送一个邮件但是在发送队列中会出现很多的inbox和outbox发送的记录。

(10) SENT: 535 Authentication failed. Restarting authentication process.
日志文件中还有一个地方就是出现了一个535权限认证的问题,这个问题也不知道为什么会这样。

参考文章:
1.SMTP login not working for hMailServer (这个讨论也没提供好点的意见和建议)
2.535 Authentication failed problem (这篇文章也没有什么可用的好的方法)

解决办法
有一天突然hMailServer无法接收邮件了出现了邮件被退回554错误,经过排查,原来是因为磁盘空间满了,清理了磁盘空间之后,在foxmail中收到这么个邮件:Message undeliverable

大意就是说无法向qq邮箱发送邮件,说是无法连接SMTP服务器,因为自己连接自己了。于是我在设置中,把”SMTP Relayer”中的 “Remote host name”清空,最后终于是可以向qq邮箱发送邮件了。

6.其他问题

(1) 554 Your message was received but it could not be saved
出现这个原因,我发现是可能是因为磁盘空间满了导致的。

参考文章:
1.554 Your message was received but it could not be saved (没什么用)
2.Your message was received but it could not be saved (这是官网对554问题可能的原因说明:如果电子邮件是hMailServer收到的,但无法保存在数据库中,则此错误消息将发送到客户端。)
3.hmailserver配置–ini文件设置 (修改hmailserver.ini文件,可以修改DataFolder文件夹的位置,这个文件夹包含了很多的数据,经常运行可能会达到20多G甚至更高)

(2) 550 Domain may not exist or DNS check failed
其实这个的真正问题,就是SPF错误,也就是垃圾邮件错误,发出去的邮件被认为是垃圾邮件。

(3) 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败
根据参考文章2的提示,我使用了提供的小工具进行账号测试,于是出现了无法登录的问题,于是我查看了邮箱设置的协议,发现了原来设置了imap协议,重新添加了一个pop3的协议就可以了。

还有一点可能需要注意,其实我换了一个hmailServer服务器,但是实际上呢,没有换域名,可能导致旧的邮件无法收取,新键一个账号就可以了。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。