搭建Apache James邮件服务

什么是邮件服务器

邮件服务器是一种用来负责电子邮件收发管理的设备,而邮件服务就是责邮件的收信和发信功能,其最主要有pop和smtp两个协议。关于这两个协议,有着很多的知识点涵盖其中,这里不过多介绍。下面是我接触过的两个可以实现邮件服务的解决方案。

1.易邮邮件服务

在windows系统下,可以使用 易邮邮件服务 ,这个服务器简单而且实用,用在平时开发,测试或者局域网间的邮件收发还是挺方便的,不过我没有找到官方的,可以将易邮邮件服务安装在Linx的相关资料,因此不使用这个。这是易邮邮件服务的官方网站地址: http://www.eyousoft.net/

2.Apache james

Apache 应该都不陌生,开源免费,对于我们开发者来说是最好的家园。当时我项目需要时,一直在找邮件服务相关资料,于是找到了它。Apache James相关资料不多,所以希望写篇博客将其记录。以备以后用到,也对邮件服务能够有更深入的理解。这是官方的介绍

James stands for Java Apache Mail Enterprise Server!
It has a modular architecture based on a rich set of modern and efficient components which provides at the end complete, stable, secure and extendable Mail Servers running on the JVM.

通过介绍,不难看出,James小巧,可扩展而又不失强大,其支持pop,smtp以及相关SSL/TLS加密协议。可以用做开发测试,也可以对其扩展封装后作为企业级邮件服务。不过有一点需要说明的是,现在国内的很多云服务器是默认关闭 25 端口的,也就是默认不能使用未加密的 smtp 发送邮件,据说是为了减少垃圾邮件的产生。下图是其云服务提供商的解释截图(这个问题我自己找了很久,当时在本机测试代码完全没问题,但发布到服务器发现项目无法启动,最后无法解决,就用了AWS亚马逊云服务器作为邮件服务器测试,最终成功)。

阿里云官方说明

Emmm…
好吧,那如果服务器是国内云服务器,需要实现和外网(如QQ,163邮件服务)之间收发邮件的话,只有三个办法:
1.申请开通25端口。不过申请基本不会通过…
2.使用加密的smtp协议传输。其端口则可以使用 465 等,避免使用25端口。
3.使用aws服务器。网上也听说会封25端口,不过我当时(2017年12月份末)测试时,还是可以使用的。

那么,我们现在搭建的邮件服务,如果不发布到云服务器或者企业独立的服务器,是无法收到外网邮件服务器发的邮件的,其实也很好理解,因为外网的服务器根本找不到你的邮件服务器在哪里,找不到你的机器IP地址。不过这不影响邮件发送,和局域网内的邮件收发功能。因此,以下的邮件服务搭建主要实现的功能就是:
1.局域网内的所有邮件收信和发信(普通邮件,Html邮件,附件邮件);
2.外网的邮件发送(如果有条件测试邮件接收功能是最好的)。

将会分别在Windows平台和Linux平台搭建。

Windows平台安装配置

说明:本机测试使用的是 win10系统

下载,解压

下载地址: http://james.apache.org/download.cgi

配置开始

首先,前往 james-2.3.2.1\bin 找到 run.bat,双击启动,会发现启动以后窗口自动关闭,这是因为没有配置的原因,可能会启动失败,不过不要紧,这一次启动会生成一个文件,它就在 james-2.3.2.1\apps\james\SAR-INF\目录下,文件名 config.xml,现在配置的重点就是这个文件(如果不启动一次,这个文件是没有的)。

配置config.xml

修改xml代码,将所有localhost 替换为你的邮箱域名,这个可以随便写一个,等会配置一下hosts文件,将域名指向本机,即可将本机的james作为邮件服务器。

<!-- 配置这里,将这个xml文件的localhost替换成你的域名(这里测试使用xingchen.cn)-->
<postmaster>[email protected]</postmaster>

邮件数据存储选择,根据xml来看,提供的有3中数据存储方式:
1.file:// 文件存储
2.db:// 数据库存储
3.dbfile:// 数据文件式存储

这些数据存储方式可以根据自己实际需求来定,不过如果选择文件存储方式,在启动时会出现找不到文件等错误,所以需要确认已经创建好文件夹再启动。当时为了方便,所以选择的是数据库存储方式,数据库使用Mysql数据库存储,因此需要作一下代码变更。如果你不需要使用数据库存储,就可以跳过数据库相关配置,包括 驱动包的导入,DBCP连接池配置等。

Mysql数据库配置 1:

<!-- 重要说明: 注释掉默认的 file:// ,这个在文件中有好几处地方,修改方式雷同,都要注释掉默认的这个,再打开数据库存储方式的配置
<inboxRepository>
<repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
</inboxRepository>
-->
<!--使用数据库作为数据存储-->
<inboxRepository>
<repository destinationURL="db://maildb/inbox/" type="MAIL"/>
</inboxRepository>

Mysql数据库配置 2:
将mysql的驱动包拷贝到 james2.3.2\lib目录下

Mysql数据库配置 3:
找到 <data-source> 节点 配置数据库连接

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>com.mysql.jdbc.Driver</driver>
<dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
<user>username</user>
<password>password</password>
<max>20</max>
</data-source>

Mysql数据库配置 4:在Mysql数据库中添加一个空的数据库 mail ,数据库只能是mail,以后的数据都将会存储在这个数据库中。

找到 <administrator_accounts>,将!changeme!改掉,等会登录使用的就是这个密码。

<administrator_accounts>
<!-- CHECKME! -->
<!-- Change the default login/password. -->
<account login="root" password="!changeme!"/>
</administrator_accounts>
找到<servernames>,将两true改为false
<servernames autodetect="false" autodetectIP="false">
<!-- CONFIRM? -->
<servername>xingchen.cn</servername>
</servernames>

找到下面的代码,注释掉。

<!--
<mailet match="InSpammerBlacklist=dnsbl.njabl.org."
class="ToProcessor">
<processor> spam </processor>
<notice>550 Requested action not taken: rejected - see http://njabl.org/</notice>
</mailet>
-->

?

配置 DNSServer, 使用Google 的 Public DNS (还可以使用阿里云的DNSServer,之前我测试没毛病,可以使用,查阅地址在这里 https://baike.baidu.com/item/dns/427444?fr=aladdin#14 ):

<servers>
  <server>8.8.8.8</server>
  <server>8.8.4.4</server>
</servers>

此时,再次运行 run.bat即可。如果看到以下界面,说明安装成功。

服务器启动成功

3.客户端登录

使用telnet指令登录

telnet localhost 4555
#因为是本机服务,所以直接使用localhost连接邮件服务器

4.添加用户

adduser test test

这个命令很简单,就是添加一个用户名为 [email protected] ,密码 test 的用户只要在注册一个用户,就可以实现邮件互发了。下面举例使用 Foxmail 测试邮件收发。

Windows测试邮件收发

1.测试工具 : Foxmail客户端
2.前提:两个注册在你的邮件服务器的帐号
3.预计实现结果:正常收发邮件,包括普通文本、富文本格式和附件收发。

注册帐号
adduser test2 test2

因为上文中也提到,已经有一个帐号 test 了,所以这里添加另外一个,这里的密码已经加密,由James内部实现。你可以前往数据库 Mail 的users表中查看相关信息。如下图

数据库显示

Foxmail设置

安装,打开foxmail,将我们刚刚注册的两个用户添加进去。步骤如下:

新建用户 1

新建用户 2

新建用户 3

另一个帐号以此为例,创建即可。

测试开始

第一封:普通文本

邮件预览

测试结果

因为篇幅有限,富文本格式和附件收发测试就不截图了。本机测试可行,配置无误应该都没问题。

至此,Windows环境下配置,测试完毕。其中比较繁琐的是 config.xml的修改配置,如果发现启动失败,报错情况。很大可能是这个配置未完整或者有误。在文章后面我会提供一个本机测试可用的 config.xml 文件。

Linux平台安装配置

说明:Linux系统环境是 CentOS6.8 32位机器。

上传安装包 解压

软件包在上文已经提供,直接将 tar.gz 安装包下载下来,并上传至服务器解压即可。

#解压命令
tar -zxvf james-binary-2.3.2.1.tar.gz

首次启动

./run.sh

如果出现 -bash: ./run.sh: Permission denied,说明没有执行的权限,需要给当前用户添加一个可执行的权限。

Linux第一次运行

可以发现执行成功。此时 使用 Ctrl + C 终止程序 。

配置

1.开始配置 //apps/james/SAR-INF/config.xml .具体配置和windows上配置大同小异,DNSServer使用Google 的 Public DNS :

<servers>
  <server>8.8.8.8</server>
  <server>8.8.4.4</server>
</servers>

2.同样,数据库相关也要根据你的服务器中安装的Mysql做相应配置。

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
  <driver>com.mysql.jdbc.Driver</driver>
  <dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
  <user>root</user>
  <password>yourMysqlPwd</password>
  <max>20</max>
</data-source>

3.将数据库驱动添加到 //lib 目录下。

4.创建数据库 mail

mysql> create database mail;
Query OK, 1 row affected (0.00 sec)

5.启动

6.测试连接

可以使用本机或者别的电脑测试连接 4555端口,如下:

telnet 你的IP 4555

Telnet登录

似曾相识页面出来了,这样就可以添加用户,邮件收发啦…

adduser [email protected] password

Foxmail测试

此时,将刚新建的用户配置到foxmail客户端中即可收发所有邮件。

与上文的Windows测试大同小异,不细述。

常见的坑

1.报错一 : java.io.IOException: 文件名、目录名或卷标语法不正确。

原因:这个报错的原因是用户信息,邮件收发产生的数据存储路径有误,默认使用的是文件存储。

解决:参考文章前半部分

? a. 找到 所有的 destinationURL ,默认配置的是 ‘file://var/mail….’,就是使用文件存储,这里将其注释。如下图所示:

配置文件修改

? b.把数据库驱动添加到 //lib/ 目录下,我这里用的是Mysql,所以将 mysql-connector-java-5.1.39-bin.jar 添加到 lib 文件夹下。

? c.在数据库中创建一个 名为 mail 的数据库。当再次运行后James内部就会自动创建几个表。如下:

创建名为 mail 的数据库

? 此时,再次启动,应该就成功了。

2.报错二 : om.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database ‘mail‘

原因:没有创建数据库 mail ,创建即可解决。这是由这项配置决定的,需要确认填写无误,还有数据库驱动已加入其中即可避免。

  1. <data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
  2. <driver>com.mysql.jdbc.Driver</driver>
  3. <dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
  4. <user>root</user>
  5. <password>yourMysqlPwd</password>
  6. <max>20</max>
  7. </data-source>

3.无法收发外网邮件

原因:这个错误原因会比较多,也很难总结,包括安装,配置,帐号等方面都有可能出问题。不过大多数还是配置出错引起的。可以参考这篇文章:Apache James使用的方法及相关心得(转),这是博客园上的文章,感谢原作者的分享和总结,当时我也是根据这篇文章解决无法的收发外网邮件的BUG。

4.说明:如果没有独立域名和服务器,没有独立的公网IP地址,无法真正做到收外网邮件,不过为了满足开发测试,可以在hosts文件中添加伪域名,实现其功能。

这个链接是下载配置样例的config.xml,仅供参考。

总结

是的,又是造轮子,但是对于技术提升和代码实践还是很有帮助,可以更深理解别人的代码思想,技术逻辑。其实我一直觉得,技术对我来说,把坑挖得越深越好,理解越透彻越好,代码不在于多,而在于真正理解编程思想,解决实际问题。这才是编程的实际意义。



原文出自:星尘 www.myxinge.cn

原文地址:https://www.cnblogs.com/xingc/p/8179727.html

时间: 2024-11-05 20:47:25

搭建Apache James邮件服务的相关文章

手动搭建apache james邮件服务器,实现邮件功能

最近一直在搞邮件这块,本来我们邮件发送是用的腾讯免费的企业邮箱,邮件功能没有问题,但是由于邮件的限制,如下: 这些限制导致我们的部分客户是收不到邮件的,哪怕付费,这样的固定频率限制也是无法解决的,可以说我们国内的邮件厂商都是这样,而国外的却要收费. 那么问题来了,如何突破发送邮件的频率限制? 1. 成为该企业用户的白名单,也就是说有关系,让邮件厂商后台开放就行 2. 自己搭建邮件服务器,其实这个就是最实在的 周末花了两天时间搭建了邮件服务器,也走了不少弯路,那么咱们今天就来说说 我自己搭了两款,

Dockerfile搭建apache、ssh服务

Dockerfile文件 实验需求: 1.  创建容器守护态运行 2.  使用dockerfile文件创建镜像 3.  使用镜像搭建httpd.sshd服务 实验步骤: 守护态运行 更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行.此时,可以通过添加  -d  参数来实现.例如下面的命令会在后台运行容器. 或 容器启动后会返回一个唯一的 id,也可以通过dockerps命令来查看容器信息. 1.docker run -d 运行提个新的容器,我们通过-d命令让他

搭建Apache网站基础服务

简介 Apache HTTP Server 是开源软件项目的代表,也是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上.因为它是自由的开源软件,所以不断有人来为它开发新的功能.新的特性.修改原来的缺陷. Apache的主要特点: 开源代码:这是它的重要特点之一,也是其他特性的基础 跨平台应用:apache服务器可以运行在绝大多数的平台上 支持各种web编程语言:Apache服务器可支持的网页编程语言包括Perl.PHP.Python.Java等. 模块化设计:Apa

Linux 邮件服务搭建

Linux 邮件服务搭建 邮件服务针对,在大型企业使用的比较多,一般小型企业都会买一些邮件服务,或者使用一些免费的邮件服务,达到我们使用的需求,并且不需要自己维护,下面我就来简单安装一下两个邮箱的案例,方便我们去理解. 邮件方案 1.免费方案,免费邮件企业邮箱 有限制- 最多50人等··· 2.付费企业邮箱 3.搭建的邮箱 邮件相关知识了解 发邮件协议:smtp 25端口 发邮件服务:postfix 服务 收邮件协议:pop pop3 110端口.imap 143端口 收邮件服务:dovecot

在windows平台使用Apache James搭建邮件服务器以及使用C#向外网发送邮件

首先环境搭建: 1.下载安装JDK,并且配置环境变量 2.下载Apache James ,下载解压之后的目录如图 双击bin下边的run.bat批处理文件安装James 服务,提示如下信息说明安装成功: Using PHOENIX_HOME: C:\james Using PHOENIX_TMPDIR: C:\james\temp Using JAVA_HOME: Phoenix 4.0.1 james 2.3.2.1 Remote Manager Service started plain:4

Apache James搭建内网邮件服务器

Apache James搭建内网邮件服务器 极客521 | 极客521 2014-08-21 148 阅读 java 大概之前两个礼拜的日子,讨论会介绍了关于了.net内网邮件服务器的搭建.所以自己也很有必要来尝试一把邮件服务器的搭建,这里选取的是james这个工具. 为什么要使用内网邮件服务器? a.安全这里仅限个人观点.对于任何一个企业来说,必要安全保密是非常重要的. b.不受internet的限制虽然说现在到处都是wifi,但是有一个能够自己来控制和使用的邮件服务器肯定是不错的选择. 什么

James+Javamail构建邮件服务

James+Javamail构建邮件服务 本文描述如何使用James搭建具备一定邮件过滤.邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能. 1 关于James与Javamail Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP.POP3与NNTP等多种邮件相关协议.James是一个邮件应用平台,可以通过Mailet扩充其功能,如Mail

企业级邮件服务搭建

背景:两台虚拟机:一台作为邮件服务器(115.179)另一台作为DNS服务器以及客户端(115.175) DNS服务器: 搭建DNS服务器,使之能解析出www.mail域名 安装DNS软件并配置/etc/named.conf./etc/named.rf1912.zones等 DNS服务器搭建好之后,将测试机的DNS指向DNS服务器的IP地址 POSTFIX服务器: 安装gcc yum install -y gcc* 安装数据库以及mailx yum install -y mysql mysql-

cenos使用源代码搭建apache服务与常见搭建问题

root#service iptables stop  #关闭防火墙root#setenforce 0  关闭安全的linux策略root#tar zxvf apache -C /usr/src/ #解压apache数据包到指定目录下root#mkdir /usr/local/apache  #创建一个文件夹,将apache安装到此文件夹下root#cd /usr/src/apache #进入解压后的apache文件夹root#./configure --prefix=/usr/local/ap