2014-12-11 2 views
0

У меня был рабочий почтовый сервер Apache James, но он просто преобразовал его в базу данных MySQL вместо файловой системы.
Он создал (некоторые) таблицы, но он не будет писать им. Это не позволяет отправлять почту.Apache James 2.3.2 не будет писать в MySQL

Поскольку он будет взаимодействовать с пользователями базы данных и вставки, я не думаю, что у меня есть база данных источника и пользователь настроен правильно ...

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource"> 
    <driver>com.mysql.jdbc.Driver</driver> 
    <dburl>jdbc:mysql://127.0.0.1/james</dburl> 
    <user>xxxx</user> 
    <password>yyyy</password> 
    <max>20</max> 
</data-source> 

Но когда я пытаюсь отправить по электронной почте, я не ошибка от клиента, но я ничего не получаю в базе данных в любой таблице. Все, что я получаю эту ошибку на Джеймса консоли ...

exception! javax.mail.MessagingException: Exception caught while storing mail Container: ; 
    nested exception is: 
     com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1 

Вот полный стек след от mailet бревна ...

10/12/14 16:23:18 INFO James.Mailet: Error while storing mail. 
javax.mail.MessagingException: Exception caught while storing mail Container: ; 
    nested exception is: 
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1 
    at org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:764) 
    at org.apache.james.transport.mailets.ToMultiRepository.storeMail(ToMultiRepository.java:230) 
    at org.apache.james.transport.mailets.ToMultiRepository.service(ToMultiRepository.java:154) 
    at org.apache.james.transport.mailets.LocalDelivery.service(LocalDelivery.java:66) 
    at org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:424) 
    at org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405) 
    at org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2973) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600) 
    at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1129) 
    at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:681) 
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:803) 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168) 
    at org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:752) 
10/12/14 16:23:18 INFO James.Mailet: ToRepository: Storing mail Mail1418257398530-1 in dbfile://maildb/deadletter/error 

Вот как я указал хранилище ...

<mailet match="All" class="ToRepository"> 
    <repositoryPath> db://maildb/deadletter/error </repositoryPath> 
</mailet> 

Поскольку он, кажется, жалуется на пустое last_updated datetime, я сделал допустимым этот столбец null, но это не помогло. Я никоим образом не изменяю java, поэтому не должно быть ничего, что я испортил. Я даже не знаю, где он получает дату.

Может ли кто-нибудь увидеть то, что я пропустил?

ответ

0

Решен: я нашел неясный пост в архивах ошибок Apache, который упоминает добавление этого PARM ...

<dburl>jdbc:mysql://127.0.0.1/james?useServerPrepStmts=false</dburl> 

... в области источника данных. На самом деле, сообщение говорит, чтобы добавить здесь 2 парма, но я обнаружил, что он примет только один парм.

Я не знаю, как я должен был знать об этих парме или о том, что они делают, но это заставило все магически работать. Иногда использование программного обеспечения с открытым исходным кодом учит вас больше исследований, чем программирования.

Смежные вопросы