james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eric Charles <e...@apache.org>
Subject Re: How to use MailboxManager to insert a "fake" mail?
Date Fri, 15 Jun 2012 07:07:30 GMT
Hi Jerry,

Glad you made it work :)

You can find the datasource definition in the spring-server.xml located 
in $JAMES_HOME/conf/META-INF/org/apache/james/spring-server.xml (at the 
bottom of the file, section "Database DataSource", it is indeed defined 
as a org.apache.commons.dbcp.BasicDataSource with best-effort regarding 
the eviction... parameters).

Obviously, this should be further documented on 
http://james.apache.org/server/3/config-system.html where we although 
describe the james-database.properties and link to the spring-server.xml 
file...

Thx, Eric


On 06/15/2012 01:21 AM, Jerry Tian wrote:
> Hi, Eric,
>
> Thanks for your hint. This bug finally turned out to be my mistake on
> new line characters("\r\n", not "\n") used in mail body stream.
>
> Now the server is switched to MySQL as backend mail storage. There is
> one thing I can't find out myself with respect to this deployment
> configuration.
>
> There is only one collection opened by James after starting it up. I
> am guessing James is using Apache's common DBCP as its database
> connection pool(since I found this JAR in "lib" directory), but how do
> I configure it? A grep within the James directory doen't yield useful
> search results, and the manual on website also doesn't mention it.
>
> Regards.
>
> On Mon, Jun 4, 2012 at 1:26 AM, Eric Charles<eric@apache.org>  wrote:
>> Hi Jerry,
>>
>> Not sure what's happening there. The String you give is not empty, so it
>> should work.
>>
>> Kickoff your debuger and follow the path all the way down... Check also what
>> is stored in your Derby database (database files are located under
>> ${your.james.home}/var/store/derby - you will have to stop james and connect
>> via a jdbc client with the correct connect string
>> jdbc:derby:/${your.james.home}/var/store/derby).
>>
>> Thx, Eric
>>
>>
>> On 06/03/2012 04:00 PM, Jerry Tian wrote:
>>>
>>> Hi, Eric,
>>>
>>> Thanks for your help, kinda on the move these days, sorry for the late
>>> reply.
>>>
>>> BTW, I am also thinking of using a IMAP client to manipulate the mail
>>> store, this seems more "safe" but less efficient. So, for better
>>> efficiency, I still prefer the direct way.
>>>
>>>
>>> On Thu, May 31, 2012 at 1:32 AM, Eric Charles<eric@apache.org>    wrote:
>>>>
>>>> Hi Jerry,
>>>>
>>>> Why do you want to store anything if you want to act as a proxy?
>>>> Shouldn't
>>>> you always delegate the request to the remote imap server?
>>>
>>>
>>> You are right, it do include 2-way data transfer, and the James server
>>> is acting as a gateway, the previous proxy concept is not accurate.
>>>
>>> It is used to bring a legacy client and a third party service together.
>>>
>>>>
>>>> To try to answer your question:
>>>> - which mailstore do you use: memory?
>>>
>>>
>>> Now, the test and debug installation is using the default Derby
>>> database, which should be the memory mail store you mentioned. In
>>> production env, MySQL
>>> is our choice.
>>>
>>>> - are you accessing the same mailstore when invoke getMessages()?
>>>
>>>
>>> Yes.
>>>
>>>>
>>>> Print also the content of the msgContent string before callen append().
>>>
>>>
>>> =========================================
>>>
>>> Subject: Coming soon
>>> From: abc@def.com<abc@def.com>
>>> X-Universally-Unique-Identifier: 3f4e6172-042b-4363-8edb-a366751f8163
>>> Content-Type: text/html;
>>>         charset=utf-8
>>> X-Uniform-Type-Identifier: com.apple.mail-note
>>> Message-Id:<a95c1844-a3cb-4726-9c3d-d8c9031a6c0b@def.com>
>>> Date: Thu, 24 May 2012 16:19:31 +0800
>>> X-Mail-Created-Date: Thu, 24 May 2012 16:19:31 +0800
>>> Content-Transfer-Encoding: 7bit
>>> Mime-Version: 1.0 (1.0)
>>>
>>> Coming soon
>>>
>>> =========================================
>>>
>>> This is the message I dumped before append(). Hope it helps.
>>>
>>>>
>>>> Thx, Eric
>>>>
>>>>
>>>> On 05/30/2012 05:20 PM, Jerry Tian wrote:
>>>>>
>>>>>
>>>>> Hi, Jame developers,
>>>>>
>>>>> I am building a proxy/gateway using james-imap-processor sub-module.
>>>>> Currently I directly put my testing logic into the actual processor.
>>>>>
>>>>> In org.apache.james.imap.processor.SearchProcessor, before the actual
>>>>> searching happening, I am trying to insert/save some fake mails into
>>>>> mailbox using the provided MailboxManager.
>>>>>
>>>>> This is the code, more of a hack, which is borrowed from the
>>>>>   AppendProcessor.
>>>>>
>>>>> =========================================
>>>>>                         //add this message into mailbox.
>>>>>                         String msgContent =
>>>>> this.getNewMsgStreamContent(noteData.getNoteTitle(),
>>>>>
>>>>>   noteData.getNoteTitle(),//noteData.getNoteContent(),
>>>>>                                         new
>>>>> Date(noteData.getCreatedAt()),
>>>>>                                         inoteUID,
>>>>>                                         null,
>>>>>                                         userId,
>>>>>                                         userDomain);
>>>>>
>>>>>                         logger.info("using raw msg content generated:
" +
>>>>> msgContent);
>>>>>
>>>>>                         final MailboxPath mailboxPath = ...;
>>>>>                         final SelectedMailbox selectedMailbox =
>>>>> imapSession.getSelected();
>>>>>                         final boolean isSelectedMailbox = selectedMailbox
>>>>> != null&&
>>>>> selectedMailbox.getPath().equals(mailboxPath);
>>>>>
>>>>>                         mailbox.appendMessage(new
>>>>> ByteArrayInputStream(msgContent.getBytes("ISO-8859-1")),
>>>>>                                         new
>>>>> Date(noteData.getCreatedAt()),
>>>>>                                         mailboxSession,
>>>>>                                         !isSelectedMailbox,
>>>>>                                         new Flags());
>>>>> =========================================
>>>>>
>>>>> And the referred getNewMsgStreamContent method is as below(the
>>>>> template used is dumped before using the same client and server):
>>>>>
>>>>> =========================================
>>>>>         private String getNewMsgStreamContent(String title, String
>>>>> content,
>>>>> Date cDate, String inoteUUID, String msgUUID, String userId, String
>>>>> domain) {
>>>>>                 final SimpleDateFormat sdf = new SimpleDateFormat("EEE,
d
>>>>> MMM yyyy
>>>>> HH:mm:ss Z");
>>>>>
>>>>>                 if (cDate == null) {
>>>>>                         cDate = new Date();
>>>>>                 }
>>>>>                 String currDate = sdf.format(cDate);
>>>>>
>>>>>                 if (inoteUUID == null) {
>>>>>                         inoteUUID = UUID.randomUUID().toString();
>>>>>                 }
>>>>>
>>>>>                 if (msgUUID == null) {
>>>>>                         msgUUID = UUID.randomUUID().toString() + "@"
+
>>>>> domain;
>>>>>                 }
>>>>>
>>>>>                 String syncUser = userId + "@" + domain;
>>>>>
>>>>>                 return NEW_MSG_TPL.replaceAll("__TITLE__", title)
>>>>>                                 .replaceAll("__SYNC_USER__", syncUser)
>>>>>                                 .replaceAll("__INOTE_UUID__", inoteUUID)
>>>>>                                 .replaceAll("__MSG_UUID__", msgUUID)
>>>>>                                 .replaceAll("__CDATE__", currDate)
>>>>>                                 .replaceAll("__BODY__", content);
>>>>>         }
>>>>>
>>>>> =========================================
>>>>>
>>>>>   From my test, the above method will produce a message as this:
>>>>>
>>>>> =========================================
>>>>>
>>>>> Subject: Coming soon
>>>>> From: abc@def.com<abc@def.com>
>>>>> X-Universally-Unique-Identifier: 3f4e6172-042b-4363-8edb-a366751f8163
>>>>> Content-Type: text/html;
>>>>>         charset=utf-8
>>>>> X-Uniform-Type-Identifier: com.apple.mail-note
>>>>> Message-Id:<a95c1844-a3cb-4726-9c3d-d8c9031a6c0b@def.com>
>>>>> Date: Thu, 24 May 2012 16:19:31 +0800
>>>>> X-Mail-Created-Date: Thu, 24 May 2012 16:19:31 +0800
>>>>> Content-Transfer-Encoding: 7bit
>>>>> Mime-Version: 1.0 (1.0)
>>>>>
>>>>> Coming soon
>>>>>
>>>>> =========================================
>>>>>
>>>>> Although the invoking of appendMessage generates no exception so far,
>>>>> it turns out only an empty mail record is stored in this mail box.
>>>>> That is, the messageManager.getMessages(MessageRange,
>>>>> FetchGroup.HEADERS, mailboxSession) does returns newly added records
>>>>> in search result, but only MessageResult.getUid() returns a valid
>>>>> value, and all other header values are missing(different from the
>>>>> normal mail records from real clients).
>>>>>
>>>>> Any clue why this is happening? And is there a more developer friendly
>>>>> way to directly save a "fake" mail into user's mailbox?
>>>>>
>>>>> Thanks a lot.
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>
>>>>
>>>> --
>>>> eric | http://about.echarles.net | @echarles
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>
>> --
>> eric | http://about.echarles.net | @echarles
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>

-- 
eric | http://about.echarles.net | @echarles

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message