欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

apache james 的配置学习

程序员文章站 2022-03-17 16:53:28
...

    Apache james是一个开放源代码的完全基于Java开发的邮箱系统.它的介绍说明可以上官网或者百度上面了解.我在这里记录一下我最近尝试使用james遇到的问题.

    首先,配置apache james.

      james 基于Java 依赖于Java,所以要检查 james 所在服务器的JAVA_HOME 环境变量有没有设置.

        设置好环境变量之后, 进入\james-2.3.2\bin,目录双击run.bat就可以使用默认的配置启动james服务了.

        当然,默认配置不能满足我们的需要 ,那么需要进入.\james-2.3.2\apps\james\SAR-INF\目录中编辑config.xml文件进行定制.

    1). :(52行左右)

<postmaster>Postmaster@localhost</postmaster>

修改为 :

<postmaster>Postmaster@自定义后缀名(如 cepri.com</postmaster>

 

2). :(71行左右)

   <servernames autodetect="true" autodetectIP="true">

<!-- CONFIRM? -->

        <servername>localhost</servername>

  </servernames>

 修改为 :

<servernames autodetect="false" autodetectIP="false">

<!-- CONFIRM? -->

 <servername>自定义后缀名(如 cepri.com</servername>

  </servernames>

3). :(551行左右)

<mailet match="RemoteAddrNotInNetwork=127.0.0.1"

class="ToProcessor">

<processor> relay-denied </processor>

<!--[if !supportLists]-->1.       <!--[endif]--><notice>550 - Requested action not taken: relaying denied</notice>

 </mailet>

 以上部分整体注释掉.

4). :(896行左右)

<authRequired>true</authRequired> 的注释去掉,使其生效.

    默认情况下,james使用的是文件系统存数用户账户和邮件等信息.如果要使用数据库存储,

    还需要进行下面设置

    1,找到<users-store>标签  

    将下边的这种文件存储方式注释  

    <repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">  

        <destination URL="file://var/users/"/>  

    </repository>  

    把下边的数据库存储方式的注释打开或者新增  

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

        <sqlFile>file://conf/sqlResources.xml</sqlFile>  

    </repository>  

2,找到<data-source name="maildb"这一行修改成以下内容  

    <data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">  

        <driver>oracle.jdbc.driver.OracleDriver</driver>  

        <dburl>jdbc:oracle:thin:@192.168.1.1:1521:test</dburl>  

        <user>test</user>  

        <password>test</password>  

        <keep-alive>select 1 from dual</keep-alive>  

            <testOnBorrow>true</testOnBorrow>  

            <testOnReturn>true</testOnReturn>  

            <max>50</max>  

        <poolPreparedStatements>true</poolPreparedStatements>  

    </data-source>  

3,找到<inboxRepository>  

    将下边的这种文件存储方式注释  

    <inboxRepository>   

        <repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>     

    </inboxRepository>  

    把下边的数据库存储方式的注释打开或者新增  

    <inboxRepository>   

        <repository destinationURL="db://maildb/inbox/" type="MAIL"/>   

    </inboxRepository>      

4,找到<spoolrepository  

    将下边的这种文件存储方式注释    

    <spoolrepository destinationURL="file://var/mail/spool/" type="SPOOL"/>  

    把下边的数据库存储方式的注释打开或者新增

    <repository destinationURL="dbfile://maildb/spool/spool" type="SPOOL"/>  

5,将相应驱动拷贝到james/lib/  

 

 

    我个人使用的是邮箱账户存储在数据库中,启动存储在文件中,

    这样的好处是增删用户直接操作数据库就可以了,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);
		}
	}

 

   

     如果邮件内容存在数据库的话,会遇到附件大小1M的限制,是因为mysql的默认max_allowed_packet大小为1M,

    可以改my.ini中此属性的大小(如果没有自己添加上去)来调整附件的大小.