这段时间在玩james,由于自己E文水平不行,加上文档又少,遇到了不少问题。现在有一个问题搞了好多天都没搞定,现在把它发出来,请求大家帮忙!
我现在配置的james服务器可以给126.com的服务器发邮件,也可以收取james的内部邮件。
现在需要把james作为本地的邮件服务器,通过它来收取外部邮件服务器(如163.com)的邮件。但是不管我怎么配置都收不到外部的邮件。
james版本是3.X的(就是现在还没有发布的版本,支持spring的),其中的fetchmail的配置文件james-fetchmail.xml如下:
<fetchmail enabled="true">
<fetch name="163.com">
<accounts>
<account user="lude707" password="123456" recipient="[email protected]" ignorercpt-header="false"/>
</accounts>
<host>pop.163.com</host>
<interval>10000</interval>
<javaMailProviderName>pop3</javaMailProviderName>
<javaMailFolderName>INBOX</javaMailFolderName>
<javaMailProperties>
<property name="mail.pop3.connectiontimeout" value="80000"/>
<property name="mail.pop3.timeout" value="80000"/>
</javaMailProperties>
<fetchall>true</fetchall>
<recursesubfolders>false</recursesubfolders>
<fetched leaveonserver="false" markseen="true"/>
<remotereceivedheader index="1" reject="true" leaveonserver="true" markseen="false"/>
<maxmessagesize limit="0" reject="false" leaveonserver="true" markseen="false"/>
<undeliverable leaveonserver="true" markseen="false"/>
<recipientnotfound defer="true" reject="true" leaveonserver="true" markseen="false"/>
<blacklist reject="true" leaveonserver="true" markseen="false"> [email protected], [email protected] </blacklist>
<userundefined reject="true" leaveonserver="true" markseen="false" />
<remoterecipient reject="true" leaveonserver="true" markseen="false" />
</fetch>
</fetchmail>
大家帮我看一下,我的配置错在那里,谢谢!
(第一次问问题,不知道这么发有没有人看到)
晕,这么多天了才浏览了五次,也午大部分都是我看的。
这个问题我已经搞得差不多算是清楚了,主要是这个版本是测试版,有不少东西都还没有搞好,这个是系统没有对DefaultTimeScheduler类的实例调用start()方法,我现在对它做了点改进:
private boolean isRunning = false;
public void start()
throws Exception
{
if(false == isRunning)
{
//this should suck threads from a named pool
System.out.println("DefaultTimeScheduler is starting now!");
getLogger().info("DefaultTimeScheduler is starting now!");
getThreadManager().getDefaultThreadPool().execute( this );
isRunning = true;
}
else
{
System.out.println("DefaultTimeScheduler has bean started now!");
getLogger().info("DefaultTimeScheduler has bean started now!");
}
}
并且在addTrigger()方法里对start()进行调用,这样问题就暂时解决了。
不过这只是一时的解决办法,最终的解决办法还得等apache来做。
因为start()是Startable接口的方法,根据系统的定义,这个应该是DefaultTimeScheduler类实例化后就执行的,结果我对它进行测试是没有执行的。
但是看DefaultComponentFactory类的incarnation()方法的代码时,感觉它应该是执行了的。
//incarnation()方法部分代码
if( Startable.class.isAssignableFrom( clazz ) )
{
getLogger().debug( "applying startup" );
if( m_secure )
{
AccessController.doPrivileged(
new PrivilegedExceptionAction()
{
public Object run() throws Exception
{
((Startable)instance).start();
return null;
}
},
m_model.getAccessControlContext() );
}
else
{
ContainerUtil.start( instance );
}
getLogger().debug( "component startup completed" );
}
很想验证一把,但最近太忙了,以后再搞吧。