因公司的业务需要,需要搭建一个自己的邮箱服务器。选了很多的版本,最后选择了James,并且分为两个James的版本。3版本的和2版本的在以下都会介绍安装配置和使用,以及外网部署的配置。参考别人的博客以及对于James的官网研究了将近三天,最后将两个版本的都测试成功。
一:准备工作(配置好java环境的机器)(博主公司现在用的版本是2,3版本的数据存储数据结构,不方便公司的业务)
准备的工具:①:局域网配置:James的安装包,Linux虚拟机可上网的那种(方便测试对外围发邮件)。虚拟机域名配置(vim /etc/hosts),mysql数据库。mysql的连接jar包(将邮箱的信息存储于数据库中)
②:线上配置:james的安装包,可以上网的域名,并且有域名解析,mysql数据库。mysql对应版本的的连接jar包
特别提醒:配置好的外网服务器,本域名内可以相互收发邮件。但是如果要给其他公司(qq或者谷歌)发邮件的话,国内运营商禁用25端口发送邮件。需更换为465端口(可以不加密),但是更改为465端口后,接收邮件又会出现问题,因为大家默认的都是25端口收发邮件。所以这个根据公司的业务需求,合理选择,如果仅仅是用自己的域名搭建一个邮箱服务器,james完全符合要求。
二:邮件发送的过程
三:James2.3.2局域网配置
1:下载安装包
2:我的虚拟机的域名:
3:使用ftp工具将安装包上传到服务器中,并且解压,进入bin目录下
如果你的不是可运行的脚步,直接 chmod 777 *.sh即可。
其中,phoenix.sh是可以配置jvm相关参数的脚本,vim phoenix.sh 打开,找到 PHOENIX_JVM_OPTS 如下图所示
4:运行./run.sh 就可以启动james2版本的邮件服务。
如果启动不了,就查看下端口是否被占用 lsof -i:25 查看25占用的情况,并且杀死改进程显示如下效果就说明你已经启动成功了。
启动成功后就会出现如下目录的结构,其中我们要配的就是SAR-INF/目录下的config.xml就可以了。(注意文件路径所在地)
5:修改配置,让其连接mysql数据库(oracle也可以,导入jar包配置地址就行了)
jar包导入后下面配置一下config.xml。其中包含数据库连接,pop3的配置,smtp的配置等相关信息。
我是用winscp工具连接虚拟机,并且用sublime打开文本进行修改。
mysql的配置
<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>com.mysql.jdbc.Driver</driver>
<dburl>jdbc:mysql://192.168.0.102:3306/mail?useUnicode=true&characterEncoding=UTF-8&useSSL=false</dburl>
<user>root</user>
<password>123456</password>
<poolPreparedStatements>true</poolPreparedStatements>
<max>20</max>
</data-source>
6:配置好数据库的连接后,需要配置james文件存储方式。james2.3.2默认采用file的方式存储邮件信息和邮件用户的信息。James在其james-2.3.2\apps\james\var\users路径下将用户信息以文件形式存储
邮件数据存储选择,根据xml来看,提供的有3中数据存储方式:
参考连接:https://blog.csdn.net/xiao__jia__jia/article/details/83619404
①.file:// 文件存储
②.db:// 数据库存储
③.dbfile:// 数据文件式存储
全部修改为数据库的存储
找到<users-store>
,这个标签内部管理的是存储介质,如下:
在config.xml找到
<spoolrepository destinationURL="file://var/mail/spool/" type="SPOOL"/>
将其注释,添加如下所示的配置
<spoolrepository destinationURL="db://maildb/spool/spool" type="SPOOL"/>
依旧是config.xml,找到<inboxRepository>
的配置,如下:
<inboxRepository>
<repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
</inboxRepository>
<!--
<inboxRepository>
<repository destinationURL="db://maildb/inbox/" type="MAIL"/>
</inboxRepository>
-->
将以文件存储的内容注释掉,将数据库存储的内容去掉注释,结果如下图所示
找到RemoteAddNotINetwork=127.0.0.1注释掉此段代码
到这里,存储介质的切换就完成了。在数据库中新建数据库mail(数据库的名字可以不是mail),
重启James,再看mail数据库,新建了三张表users,inbox,spool。表users存储的是邮件服务器的用户信息。表inbox存储的是收件箱的内容。表spool存储的是还未查看的邮件,一旦邮件被查看,就会从这张表中删除,转而存储到inbox中。
至此james数据存储形式更改就成功了。下面配置一下pop3和smtp相关的内容。
①:改成自己的虚拟机的域名,邮件管理员的配置
②这里的server配置如下
<!--将两个true改为false,autodetct设为true会自动侦测你的主机名,设成false会用你指定的server name; autodetectIP设为true会为你的servername加上ip。-->
dns服务设置如下图所示
③:配置smtp
<smtpserver enabled="true">
<port>25</port>
<handler>
<!--打开这个注释,开启SMTP AUTH-->
<authRequired>true</authRequired>
<!--如果将自己发送邮件服务器的地址配置在下面,则发邮件服务器不需要去进行SMTP AUTH验证,一般不需要修改-->
<authorizedAddresses>0.0.0.0</authorizedAddresses>
<!--如果该选项设置为true,则要求在发送邮件时登录用户与发送邮件用户必须是一个域名,且要求发送邮件地址@后面的域名必须与上面配置的servername相同,若为false则无此限制-->
<verifyIdentity>true</verifyIdentity>
</handler>
</smtpserver>
<!--james是通过telnet进行添加用户的,下面主要是配置telnet的端口与登录用户名和密码-->
<!--主要配置基本完成,查找autodetect和autodetectIP属性,修改为false,将所有的localhost和myMailServer替换为配置的域名,如标签里的内容 -->
这里有pop3的设置也是一样的,smtp也是一样。至此配置已经结束。
7:下面测试一下本地发邮件的效果打开新的窗口,输入telnet localhost 4555 。然后输入刚才的root,最后输入密码。
①启动james新加用户,可以输入help查看命令,下面是添加两个用户到邮件服务器中
同时mysql数据库中也有两个用户了,然后测试用火狐的客户端登录邮箱测试邮件的发送(如果发现登录不了,尝试关闭防火墙就可以了)
点击手动设置(这个火狐其实有创建账户其实有歧义的,其实就是登录邮箱)
同时可以对外网进行发送。前提是你的虚拟机能够联网,同时(例如qq邮箱) 要将test.com设置白名单域名,否则会在垃圾箱中。
数据库中也存有邮件的信息
到这里james局域网的邮件配置就完成了。功能就是可以给其他邮箱发邮件,自己服务器的内部可以互相收取邮件。缺少接受外网邮件的功能。
四:james2.3.2外网的配置主要是域名解析的配置。
1:域名的配置解析
2:将邮件服务器移到域名所指的ip服务器中,同时修改config.xml中的域名(将test.com替换成你的域名),修改数据库的配置
3:启动项目,同样的添加用户。telnet localhost 4555 同样的操作。(启动邮件的时候:./run.sh &退出可以继续运行),或者新开一个shell窗口进行添加操作。
4:用qq邮箱进行测试,发送过后点击火狐客户端的拉取按钮进行拉取邮箱信息。
5:打开火狐客户端的邮箱 点击收取按钮
我的邮件回复是电脑原因。正常都是可以回复成功的。(此处针对本片文章可以忽略)
至此james2.3.2接收外网发邮件的功能已经成功结束。
五:james3.2.0邮件的内外网配置(先记录内网的配置,而后记录外网配置)
1:同样的将安装包下载下来,上传到服务器中,配置好java环境。由于是zip包,所有需要服务器安装unzip的命令。
安装包下载可以从我
james3版本和2版本的区别就是,配置文件分开了,而且3比较完善一点。同时数据库的表名称更改了,3版本默认的页数文件存储信息。
下面针对每个配置文件进行说明
配置其实还是一样的,找到对应的节点,按照2.3.2的配置方式进行配置。
1:dnsservice.xml
<dnsservice>
<servers>
<server>192.168.0.1</server>
<server>114.114.114.114</server>
</servers>
<autodiscover>false</autodiscover>
<authoritative>false</authoritative>
<!-- Maximum number of entries to maintain in the DNS cache -->
<maxcachesize>50000</maxcachesize>
</dnsservice>
2:domainlist.xml
3:imapserver.xml
其中几个重要的点就是 autodetect ="false" 一定要设置为false,并且helloName一定要打开。如上图所示。
还有pop3也是一样的配置。
smtp.xml设置比较重要
4:数据库的配置
5:mailetcontainer.xml
将下面的代码注释了
6:mangerservice.xml
7:配置mailetcontainer.xml:(一定要按照下面的方式去修改存储方式)
- postmaster 修改为管理员邮箱,可以为 postmaster@yourDomain
- repositoryPath 同时存在文件存储(file://)、数据库存储(db://) 的,将默认的文件存储注释掉,并释放数据库存储;对于只存在文件存储的,不进行释放。分别如下图所示:(转自https://blog.csdn.net/hjnth/article/details/82931569)
至此james3.2.0内网的的基本配置就完了。可以测试一下了。启动james。并且添加用户,发送邮件。
8:测试发送邮件:启动后数据库中含有表了。出现如下的表示启动成功了(忽略中间报错的过程,外网不存在的。)
进入bin目录,客户端。添加新的用户
命令是:sh james-cli.sh -h localhost -p 9999 AddUser test3@test.com 123456
sh james-cli.sh -h localhost -p 9999 AddUser test1@test.com 123456
数据库中也有两个用户了
局域网的用户发送邮件测试。当然也可以发送给QQ邮箱邮件。我这里因为电脑的原因,测试不了。有兴趣的可以测一下。
六:james3.2.0邮件的外网配置
1:将james3.2.0的安装包放入域名所对应的服务器中进行启动。
1:同2.3.2版本一样的,按照内网的修改方式修改对应的数据库。配置好域名的解析。各种服务的域名等。
2:安装邮件服务器的域名服务器地址用netstat -rn查看配置。
3:直接测试外网的邮件服务器。
外网邮件服务启动成功
下面测试用qq发邮件的过程。
后台打印了日志
登陆火狐客户端,点击收取按钮,邮件已到账。
七:james邮箱信息的存储
james2.3.2邮箱的新存储在inbox表中,其中详细信息如下图
随便找一个解码一下。发现就是这个内容,具体的表结构,大家可以仔细研究。
感谢大家的支持,文笔有限,如果按照本文没能成功搭建服务,请参考其他信息,官方文档等方式。