78144666 发表于 2017-1-2 10:16:39

apache james 的配置学习

  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>
  <!---->1.       <!----><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中此属性的大小(如果没有自己添加上去)来调整附件的大小.
    
  
    
页: [1]
查看完整版本: apache james 的配置学习