您现在的位置是:首页 > 文章详情

James邮箱服务器简单运行配置

日期:2018-10-18点击:638

James简单运行配置

James:Java Apache Mail Enterprise Server 是一个企业级的JAVA邮件服务器.开源的.
一.配置;
首先将james-binary-2.3.1.zip解压缩下载到你的安装目录。
我们可以把这个过程理解为安装的过程。我在这里将它解压到c:\.并且把它改名为james.这样我们的james就安装好了。目录为C:\james。在此之前你得安装JDK,配置JAVA环境变量.

james的应用程序结构 

apps,bin,conf,ext,lib,logs,tools

 文件夹bin

bin目录中的run.bat和run.sh是James的启动程序。只要记住这个重要文件就可以。
启动之后控制台显示如下:

Using PHOENIX_HOME: C:\james //james安装目录 Using PHOENIX_TMPDIR: C:\james\temp //james安装目录中的temp目录,用处不详 Using JAVA_HOME: C:\javaJdk //本机安装的JDK目录 James Mail Server 2.3.1 //james版本 Remote Manager Service started plain:4555 //james端口 POP3 Service started plain:110 //pop3 端口,可在config.xml中配置 SMTP Service started plain:25 //smtp 端口,可在config.xml中配置 NNTP Service started plain:119 //nntp 端口,可在config.xml中配置 FetchMail Disabled

  

 文件夹Apps

 Apps 目录下有个james的子目录这个目录是它的核心。
 

  

  •  SAR-INF 下有一个config.xml是james中的核心配置文件。
  • Logs 包含了与james有关的Log。调试全靠它了。
  • Var 包含了一些文件夹通过它们的名字我们大概也能猜测出它们的用途。Mail主要用于存储邮件。nntp主要用于新闻服务器。Users用于存储所有邮件服务器的用户。也就是邮件地址前面的东东。如:pig@sina.com的pig就是所谓用用户。

创建用户

在James上建若干用户,用来测试收发邮件。当然如果你不用james本身的用户也可以。James以telnet 的方式提供了接口用来添加用户。下面我来演示一下。

首先使用telnet来连接james的remote manager

telnet localhost 4555 回车

这里连接到的是本机:localhost这个也是可以在config.xml里配置的,当然,如果配置成其他服务器,则需要将端口映射到本机上,这个可以在路由器里配置:192.168.0.1(具体地址视局域网而定)。

然后输入管理员用户名和密码(user/pwd : root/root 是默认设置这个可以在config.xml中修改)
 

   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

添加用户
 

  

adduser test test   User test added   Adduser lyle lyle   User lyle added  

查看添加情况

listusers Existing accouts 2 user:lyle user:test

自己项目中的一些配置 

更改配置文件:config.xml:

更改端口:

  

pop3server -- <port>201</port>    smtpserver -- <port>202</port>    nntpserver -- <port>203</port>

更改邮件服务器地址: 

servernames -- <servername>whsite.ine.net.cn</servername>或:<servername>127.0.0.1</servername> administrator_accounts -- <account login="lyle" password="lyle"/> 

收邮件:

(因为是用pop3.whsite.ine.net.cn收邮件,所以收件人,发件人的邮件地址都必须是这个服务器上的,所以我们在whsite.ine.net.cn上重新建一个帐号,然后给自己发邮件以测试);

一,打开james服务;

1)运行安装目录下bin/run.bat;

2)打开CMD;

telnet whsite.ine.net.cn 4555 //连接到服务端口;    JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id: sunyu Password: sunyu Welcome root. HELP for a list of commands adduser sunyu 123456 //添加用户,用户名为sunyu 密码为:123456 quit //断开连接    telnet whsite.ine.net.cn 201 //连接到POP3端口; user sunyu 回车; pass 123456 回车; list //查看邮件列表; retr 1 //查看第一封邮件;

其他命令还有:


1,stat 查询邮箱中的所有邮件的统计信息,一般只有邮件总数和所有邮件占用的字节大小


2,uidl 根据邮件的序号查询该邮件的唯一标志符


3,list 查询邮箱中的所有邮件信息,以列表形式列出,自动生成邮件序号。如果指定某一序号则只显示指定邮件信息


4,retr 指定邮件序号查看某邮件内容


5,dele 指定邮件序号将某封邮件设置删除标记,当执行退出命令 quit时将实际删除所有具有删除标记的邮件


6,rset 清除所有设置了删除标记的邮件的删除标记


7,top 获取某邮件的邮件头和邮件体中的前n行内容,指定邮件序号和n,以空格符隔开


发邮件:

1)连接端口;

telnet whsite.ine.net.cn 202

2)确认身份

ehlo lyle

3)输入发件人;

mail from:<lyle@whsite.ine.net.cn>

4)输入收件人:

rcpt to:<lyle@whsite.ine.net.cn>

5)输入内容:

data hello word! 回车 . 回车

这时候再进入pop3端口即可查看邮件;

默认情况下,发完出的邮件,用户信息,接收的邮件是保存在本地目录中的,默认目录是:

C:\james\apps\james\var\users:用户

C:\james\apps\james\var\mail:邮件,里面有inboxes(收件箱)outgoing(发件箱)以及一些错误信息;

当然,我们可以选择将邮件和用户信息保存在数据库中.也就是说要将James和数据库连接起来;这个连接是在config.xml里配置的;在config.xml里找到:<users-store></users-store>项,它是用来保存用户信息的;默认时它里面的是:

<repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">     <destination URL="file://var/users/"/> </repository>

意思就是说用户信息存在文件系统中的目录:users里面;

我们可以对这个设置进行更改;但James提供了现成的配置,只不过被注释掉了.我们打开注释或手写:

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

意思就是将用户信息保存在数据库的users表里.具体的SQL是在本地文件系统中的sqlResources.xml中配置的;

然后就是邮件信息的保存

找到<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表里转存;

所以,这时候我们又要对数据库进行配置,让James知道是哪个数据库,在什么地址;

在config.xml里找到<database-connections />项.它就是数据库连接的配置;在根据要连接的数据库的不同,配置的写法也不同,文件里有一些数据库写法的提示,如oracle,mysql,mssql:但要注意的是,实际上的最终正确的写法是根据数据驱动的不同而不同的.如: 

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">          <driver>oracle.jdbc.OracleDriver</driver>          <dburl>jdbc:oracle:thin:@192.168.0.55:1521:oracle</dburl>          <user>RDNEW</user>          <password>123456</password>          <max>20</max>       </data-source>    </database-connections>

上面这个是oracle的.

在连接mssql里,文件里提示的写法是: 

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">          <driver>com.inet.tds.TdsDriver</driver>          <dburl>jdbc:inetdae7:127.0.0.1?database=James</dburl>          <user>sa_james</user>          <password>blahblah</password>          <max>20</max> </data-source>

但实际上我在配置时的写法是:

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">          <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>          <dburl>jdbc:sqlserver://192.168.0.120:1433;databaseName=oadb</dburl>  <user>sa</user>          <password>root</password>          <max>20</max> </data-source>

差别主要体现在dburl这一项;

配置完成后将对应的数据驱动的jar放在James安装根目录下的lib目录下即可;这时,运行run.bat.就可.如果在配置的数据库中没有users这个表,它会自动创建这个表; 

注意:当更改默认端口后,外网发过来的邮件接收不到.所以还是用默认的:110 25 为好,同时要在路由器上将这两个端口映射到本机上.成功后的配置文件在网易网盘中.而且这个配置里面邮件和用户新建后是存在数据库中的,因为项目用的是oracle数据库,所以要将oracle数据驱动的jar文件复制到lib文件夹下.运行服务后会自动在数据库里建表:users(用户),spool(邮件),在邮件表里默认是select一次后就自动删除,即:收到邮件并查看后就自动删除.要更的话可以更改:conf/sqlResources.xml里的SQL语句.我是这样改的:

<sql name="removeMessageSQL">DELETE FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>

将上面的这条语句里的问号:?改成123;当然,我这样改了后还有一个例外情况:当上面两个字段都为123时它还是会被删除,不过这种情况在我当时的项目中貌似不会发生。。。

另外要注意的是:spool表里的数据是邮件服务器的表。我们一般会在项目中有自己的邮件表,我们收邮件的时候从spool表里读取数据后应该删除spool里的内容;

如果不删,起码也应该将spool表里数据中message_state这个字段的值改成:

spam默认情况下它的值是:trans..什么的。如果不改成spam,它会每隔一段时间就把这个邮件发送一下。正确的做法是接收完后都删除,不只是改状态这么简单。因为如果只改了状态会出现一个问题就是接收邮件时,它从数据库读数据,读出邮件,如果你这时候再读,它会重复读取。所以接收完后是肯定要删除的。

 


 

原文链接:https://my.oschina.net/lyleluo/blog/2248896
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章