邮件服务器James搭建企业邮件系统

        中小企业是否可以免费拥有自己的邮件系统,而不是去购买腾讯,163的企业邮箱。答案是肯定的,可以,Java开源的邮件系统很多,经过筛选,调研最终我们选择用James来搭建自己的邮件系统。接下来我们来看看window7环境下如何用James来搭建邮件系统:

       Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写。James 是100%基于Java的电子邮件服务器。它是一种独立的邮件服务器,并提供了一个完整的电子邮件解决方案,用来收、发电子邮件。

前期准备

1.Jdk1.6 需要配置Java环境变量,这个就不在这里详细介绍如何配置了。

2.James运行文件,下载地址http://james.apache.org/download.cgi



下载完成后直接解压,解压后找到D:\X-EI\apache-james-2.3.2\james-2.3.2\bin目录下的run.bat文件,就可以启动james邮件服务器了。

         ps:如果James用到的端口被占用,可能启动的时候会报错,然后一闪而过,这个时候我们可以去修改James的POP3,SMTP,NNTP协议的端口,他们三个默认的端口为110,25,119.这三个协议我们可能见的比较多,但是你是否了解他们都代表什么意思呢,既然我们提到了这三个协议,那么我们就来看看这三个协议代表什么意思。

  • POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
  • SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件
  • NNTP(Network News Transport Protocol),中文释义:(RFC-977)网络新闻传输协议。这是一个主要用于阅读和张贴新闻文章(俗称为“帖子”,比较正式的是“新闻组邮件”)到Usenet上的Internet应用协议,也负责新闻在服务器间的传送。NNTP用于向Internet上NNTP服务器或NNTP客户(新闻阅读器)发布网络新闻邮件的协议,提供通过Internet使用可靠的基于流的新闻传输,提供新闻的分发、查询、检索和投递。NNTP还专门设计用于将新闻文章保存在中心数据库的服务器上,这样用户可以选择要阅读的特定条目,还提供过期新闻的索引、交叉引用和终止。

归纳下就是pop3是收邮件的协议,smtp是发邮件的协议,nntp是新闻协议。

如何修改James这几个协议的端口

找到目录D:\X-EI\apache-james-2.3.2\james-2.3.2\apps\james\SAR-INF底下的config.xml文件,用editplus或者其他编辑器打开文件,ctrl+f搜索pop3
  <pop3server enabled="true">
      <!-- POP3协议端口 -->
      <port>1130</port>
      <handler>
         <helloName autodetect="false">jwdstef.com</helloName>
         <connectiontimeout>120000</connectiontimeout>
      </handler>
   </pop3server>
      我这里把原来的110端口修改成1130端口了,其他的两个端口修改也一样。
<smtpserver enabled="true">
      <!-- SMTP协议端口 -->
      <port>25</port>
      <handler>     
         <helloName autodetect="false">jwdstef.com</helloName>
         <connectiontimeout>360000</connectiontimeout>
         <authRequired>true</authRequired>
         <authorizedAddresses>192.168.0.0/255.255.255.0,127.0.0.0/8</authorizedAddresses>
         <maxmessagesize>0</maxmessagesize>
      </handler>
   </smtpserver>

 <nntpserver enabled="true">
      <!-- NNTP协议端口 -->
      <port>119</port>
      <handler>
         <helloName autodetect="false">jwdstef.com</helloName>
         <connectiontimeout>120000</connectiontimeout>
         <authRequired>false</authRequired>
      </handler>
   </nntpserver>

我们修改完这个几个端口后,就可以顺利启动James服务了。



配置服务


默认配置启动James服务,只能给内网发送邮件,我们的要求是可以给外网的其他邮箱发邮件,比如163,qq,sina等邮箱发送邮件,那么我们必须修改James默认配置,接下来我们就来看看如何修改
在D:\X-EI\apache-james-2.3.2\james-2.3.2\apps\james\SAR-INF下打开config.xml文件,找到
<postmaster>Postmaster@localhost</postmaster>
      <servernames autodetect="true" autodetectIP="true">
         <servername>localhost</servername>
      </servernames>
修改localhost为你自己的域名,假如我们的域名是jwdstef.com,那么修改完成为:
<postmaster>Postmaster@jwdstef.com</postmaster>
      <servernames <span style="color:#cc0000;">autodetect="false" autodetectIP="false"</span>>
         <servername>jwdstef.com</servername>
      </servernames>
修改dns服务,打开cmd,执行ipconfig /all 找到自己的DNS服务


<servers>
         <!--Enter ip address of your DNS server, one IP address per server -->
         <!-- element. -->
         <server>mail.126.com</server>
          <server>smtp.163.com</server>
          <server>202.106.195.68</server>
           <server>192.168.1.98</server>
          <server>jwdstef.com</server>
        
      </servers>
      <autodiscover>false</autodiscover>
      <authoritative>false</authoritative>
找到
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor"> 
	<processor> relay-denied </processor> 
	<notice>550 - Requested action not taken: relaying denied</notice> 
</mailet>

将其注释掉。并且开启SMTP Server 身份验证,打开
<span style="font-family:Microsoft YaHei;"><authRequired>true</authRequired></span>
打开后邮箱访问需要帐号验证,这样保证邮箱的安全性。
James 邮件用户的用户信息默认保存在apps\james\var\users 目录下,通过修改配置文件apps\james\SAR-INF\config.xml,可以把用户信息保存到数据库中,
配置方法如下
找到
 <users-store>
      <repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
         <destination URL="file://var/users/"/>
      </repository>

改为
<users-store>
      
      <repository name="LocalUsers" class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://intouch/users">
         <sqlFile>file://conf/sqlResources.xml</sqlFile>
      </repository>

   </users-store>

通过修改用户的存储介质从file变成了db,db://intouch/users 中intouch是数据库的名字,users是邮件系统存储用户的表名
然后我们需要让邮件信息也保存在数据库,邮件信息的保存需要修改

找到<inboxrepository>项, 默认是<repository destinationurl="file://var/mail/inboxes/" type="mail"> 
屏蔽掉,在它下面有个例子<repository destinationurl="db://maildb/inbox/" type="mail">,激活它.
然后是spool,找到<spoolrepository>将默认屏蔽掉.   
激活<repository   destinationurl="db://maildb/spool/spool"   type="spool"/>  
这时候数据库中会自动建两个表:spool和inbox;spool是临时表,只要通过邮件服务器的邮件,不管是发,收,都会存到这个表里。存入的时候邮件有个状态:message_state,状态的值有几种,transe..span,root等第一个表示正在传,当传完后邮件服务器会自动删除这条邮件(此功能可配置,后面有介绍,通过改删除邮件的SQL可屏蔽此功能);当接收一个邮件时,也是先放在spool表里。然后往inbox表里转存;

我这里使用的数据库是Mysql,首先我在mysql里面创建好数据库intouch,找到<data-source>
<data-source name="intouch" class="org.apache.james.util.dbcp.JdbcDataSource">
         <driver>com.mysql.jdbc.Driver</driver>
         <dburl>jdbc:mysql://localhost/intouch?autoReconnect=true</dburl>
         <user>root</user>
         <password>123</password>
         <max>20</max>
      </data-source>
配置好数据库连接。然后将对应数据库的jar包放到D:\X-EI\apache-james-2.3.2\james-2.3.2\lib下
这样James的数据库连接就配置好了,启动James服务,我们会看到mysql数据库intouch库里面多了一个users表。

我们还需要配置一个地方,修改c:/windows/system32/drivers/etc/hosts 文件,增加一个地址映射。
127.0.0.1 jwdstef.com

以上配置完成后,James邮箱所有配置完成。

接下来我们需要登录邮件服务器,去增加用户,发送邮件,接收邮件。

执行CMD,打开命令窗口,执行命令telnet jwdstef.com 4555,
JAMES Remote Administration Tool 2.3.1
Please enter your login and password
Login id:
root
Password:
root
Welcome root.HELP for a list of commands

这里的4555端口是默认的,为了安全,我们最好修改下这个端口,还有登录的用户名和密码,最好也修改了。修改的位置
<remotemanager enabled="true">
   	<!--服务连接端口-->
      <port>4555</port>
      <handler>
         <helloName autodetect="false">jwdstef.com</helloName>
         <administrator_accounts>
         	<!--服务连接管理员帐号密码-->
            <account login="root" password="root"/>
         </administrator_accounts>
         <connectiontimeout> 60000 </connectiontimeout>


登录成功后,我们可以添加用户,命令如下:
adduser 帐号 密码



完成配置后,我们增加了用户,但是如何收发邮件呢,通过命令去收发邮件肯定不可能,所以我们需要一个webmail来收发邮件,我们可以自己搭建一个webmail客户端应用,也可以使用foxmail等邮件客户端软件。

我们先看看如何配置foxmail,使其可以连接到我们刚才搭建的邮件服务器,完成邮件的收发。

打开foxmail进入设置页面,添加账号


jwdstef这个用户是我在James服务后台通过命令 adduser jwdstef jd1增加的。配置完成后,我们就可以收发邮件了。我们来试试给163的邮箱发一封邮件



登录163邮箱



收到邮件,说明我们的邮件服务器配置成功了!

如果还不能成功发送,接收,采取如下暴力配置:

①、查找替换所有的 localhost为域名

②、查找所有autodetect属性,修改为false。autodetectIP也设为false.

查找所有myMailServer,替换为域名。

附件大小配置

整合了mysql,james 对附件大小的限制是使用mysql对行记录的限制来实现的。mysql在默认配置配置情况下默认是1M

修改mysql所在安装目录的my.ini 增加max-allowed-packet=64M(附件大小) 

收附件的时候,会遇到收不到超过10m附件的情况,一个是前面说的mysql字段大小限制,还有一个会有jvm虚拟内存的限制,因为默认16m的虚拟内存是不够的,要在james中修改。这里有两种修改方法: 


1)在run.bat中加入set JAVA_OPTS=“-Xms32m -Xmx512m -Xss512m” 并启动 
2)在conf/wrapper.conf修改并通过服务启动

wrapper.java.initmemory=64 
wrapper.java.maxmemory=512

如果想正常收发邮件,请确保好helo或ehlo名,并对自己的mx地址做好dns反向解析,就可以基本保证全网收发.

James用户密码的加密方式

james 用户密码所用的加密方式是sha加密

/**
	 * 可以用于 md5 或者 sha 加密
	 * 
	 * @param pass
	 *            要加密的明文
	 * @param algorithm
	 *            加密方式 (md5或 sha)
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String digestString(String pass, String algorithm) 
        throws NoSuchAlgorithmException {

		MessageDigest md;
		ByteArrayOutputStream bos;

		try {
			md = MessageDigest.getInstance(algorithm);
			byte[] digest = md.digest(pass.getBytes("iso-8859-1"));
			bos = new ByteArrayOutputStream();
			OutputStream encodedStream = MimeUtility.encode(bos, "base64");
			encodedStream.write(digest);
			return bos.toString("iso-8859-1");
		} catch (IOException ioe) {
			throw new RuntimeException("Fatal error: " + ioe);
		} catch (MessagingException me) {
			throw new RuntimeException("Fatal error: " + me);
		}
	}


webmail配置

下来我们看看,如何搭建自己的邮件web端应用,经过调研筛选,这里我选择了Java开源的claros intouch2作为web端。

下载claros intouch2,地址:http://www.claros.org/web/showProduct.do-id=1.html



下载完成后我们把war包部署到tomcat6底下,启动tomcat,关于tomcat的安装和配置,这里我就不介绍了,大家自己去g.cn。

需要修改D:\Program Files\apache-tomcat-6.0.28\apache-tomcat-6.0.28\webapps\intouch2\WEB-INF\config目录下的config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<claros-config>
	<!-- COMMON PARAMETERS -->
	<common-params>
		<charset>utf-8</charset>
		<!-- the timezone is not functional at 2.0 -->
		<server-timezone>Europe/Istanbul</server-timezone>
		<!-- this directory must be writable (e.g. run a chmod 777 on it) -->
		<tmp-dir>/tmp</tmp-dir> 
		<!-- th e following two is in MB's-->
		<max-attachment-size>5</max-attachment-size>
		<max-mail-size>10</max-mail-size>
		<title>Claros inTouch 2.1</title>
		<!-- We recommend running spamassasin. -->
		<spam-check-enabled>false</spam-check-enabled>
		<!-- valid values are: da, de, en, fr, it, pt_br, pl, sk, tr, vi, zh_cn_utf8 -->
		<default-lang>en</default-lang>
		<!-- this is the default rss feed. users can set their own -->
		<rss-feed>http://rss.cnn.com/rss/cnn_topstories.rss</rss-feed>
	</common-params>

	<!-- CHAT SERVER SETUP -->
	<!-- if you have a jabber server with transports running such as 
		the MSN, yahoo, icq, aol transports the following transport 
		domains must be set. If you don't have your own jabber server
		or not running transports omit the following settings.
	-->
	<chat>
		<default-domain>claros.org</default-domain>
		<msn-transport>msn.claros.org</msn-transport>
		<yahoo-transport>yahoo.claros.org</yahoo-transport>
		<icq-transport>icq.claros.org</icq-transport>
		<aol-transport>aol.claros.org</aol-transport>
	</chat>

	<!-- MAIL SERVER SETUP -->	
	<servers>
		<server>
			<!-- give any name you desire -->
			<shortname>jwdstef.com</shortname>
			<!-- your imap/pop3 server ip/dns -->
			<fetch-server>jwdstef.com</fetch-server>
			<fetch-server-port>1130</fetch-server-port>  
            <fetch-protocol>pop3</fetch-protocol>  
            <fetch-ssl>false</fetch-ssl>  
  
            <smtp-server>jwdstef.com</smtp-server>  
            <smtp-server-port>25</smtp-server-port>  
            <smtp-authenticated>true</smtp-authenticated>  
            <smtp-ssl>false</smtp-ssl>  
		
			<folder-namespace></folder-namespace>
		</server>
	</servers>

	<!-- THE DATABASE SETUP -->
	<!-- 
		Please note that DB setup is essential to work. There is a intouch-mysql file in the SQL directory
		of the zip file. Please create a database and dump the sql file to the db. 
		
		mysqladmin -u root -p create intouch
		mysql -u root -p intouch < intouch-mysql.sql
	 -->
	<db-config>
		<db>
			<!-- do not change the term file!!! -->
			<id>file</id>
			<!-- the connection url for the JDBC connection -->
			<database>jdbc:mysql://localhost:3306/intouch</database>
			<!-- the connection class -->
			<driver>com.mysql.jdbc.Driver</driver>
			<!-- the user with read/write/delete/update/select permission to the database  -->
			<login>root</login>
			<!-- the plain text password -->
			<password>123</password>
		</db>
	</db-config>
</claros-config>

启动后我们访问Intouch。

访问成功!这样我们的web客户端也搭建完成。


  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值