Making a MimeMessageInputStream seems problematic.


I think now I'm going to rewrite the ToSenderFolder and ToRecipientsFolder. I 
will remove all of the mailboxes. I can't use them.

I thought about possibly hacking MimeMessageInputStream to include the Mail in 
a getter variable, but I would have to change too many places.

It seems the easiest is to remove the current 
ToRecipients->Seive->SeiveMailbox->Seive->Mailbox 
(MimeMessage)->Poster->Wherever->Repository path and make it: 
ToSender&ToRecipients->RepositoryRetry->Repository.



If anyone has any ideas on a better way of doing this, please let me know. 
Especially if this functionality is available, but hidden somewhere I have not 
found.



-tim



On Sun Oct 14 11:26:07 EDT 2012, tim <[email protected]> wrote:
> 
> Ok, it becomes even more complex.
> 
> 
> 
> So, I can't bounce mail from the mailbox mapper, because I no longer have the 
> mail.
> 
> It is in Mesage<Long> form.  Which seems pretty unbounceable.
> 
> I wonder if I could construct a mail from the MimeMessageInputStream. That 
> would be by far the easiest. 
> 
> 
> 
> So I trace-read ToRecipientsFolder, and saw how that went to SieveMailet, and 
> how that went to SieveMailboxMailet and how that regoes to SieveMailet which 
> in turn goes to Mailbox, etc etc etc. 
> 
> 
> 
> Unfortunately I really need to change this line:
> 
> 
> 
>             mailbox.appendMessage(new MimeMessageInputStream(mail), new 
> Date(), session, true, null);
> 
> 
> 
> But if I do that, I will end up having to change things all over the place. 
> Also I'll have to change all the code where the mail actually gets to the 
> mailbox.
> 
> 
> 
> What to do, what to do. Seems like this should be simple. So many hours 
> looking trace-reading through the interconnections between all the james 
> projects.
> 
> 
> 
> I guess I'll look into creating a mail from the MimeMessageInputStream.
> 
> 
> 
> -tim
> 
> 
> 
> 
> 
> On Sat Oct 13 22:36:09 EDT 2012, tim <[email protected]> wrote:
> > 
> > Ok, I've done this:
> > 
> > 
> > 
> > 
> > 
> >   try
> > 
> >    {
> > 
> >      Class<?> jamesContext = 
> > Class.forName("org.apache.james.mailetcontainer.impl.JamesMailetContext");
> > 
> >      log.info("got jamesContext class " + jamesContext);
> > 
> > 
> > 
> >      Method method = jamesContext.getMethod("getInstance");
> > 
> >      log.info("got getInstance method" + method);
> > 
> >     
> > 
> >      mailetContext = (MailetContext)method.invoke(null, (Object[])null);
> > 
> >      log.info("Successfully got mailet context " + mailetContext);
> > 
> >    }
> > 
> >    catch (Exception e)
> > 
> >    {
> > 
> >    e.printStackTrace();
> > 
> >    throw new MailboxException();
> > 
> >    }
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > But now I feel really dirty :-(
> > 
> > 
> > 
> > 
> > 
> > If there is a better way of doing this, please let me know.
> > 
> > 
> > 
> > -tim
> > 
> > 
> > 
> > 
> > 
> > On Sat Oct 13 22:06:07 EDT 2012, tim <[email protected]> wrote:
> > > 
> > > Ok, I've figured out where it is instantiated from, it looks like it is a 
> > > bean:
> > > 
> > > 
> > > 
> > > instantiating JamesMailetContext
> > > 
> > > java.lang.Exception: hi
> > > 
> > > at 
> > > org.apache.james.mailetcontainer.impl.JamesMailetContext.<init>(JamesMailetContext.java:73)
> > > 
> > > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> > > 
> > > at 
> > > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
> > > 
> > > at 
> > > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> > > 
> > > at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
> > > 
> > > at 
> > > org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:76)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:990)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:943)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
> > > 
> > > at 
> > > org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:442)
> > > 
> > > at 
> > > org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:416)
> > > 
> > > at 
> > > org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:549)
> > > 
> > > at 
> > > org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:159)
> > > 
> > > at 
> > > org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
> > > 
> > > at 
> > > org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
> > > 
> > > at 
> > > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
> > > 
> > > at 
> > > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
> > > 
> > > at 
> > > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
> > > 
> > > at 
> > > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
> > > 
> > > at 
> > > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
> > > 
> > > at 
> > > org.apache.james.container.spring.context.JamesServerApplicationContext.<init>(JamesServerApplicationContext.java:39)
> > > 
> > > at 
> > > org.apache.james.app.spring.JamesAppSpringMain.init(JamesAppSpringMain.java:61)
> > > 
> > > at 
> > > org.apache.james.app.spring.JamesAppSpringMain.main(JamesAppSpringMain.java:42)
> > > 
> > > 
> > > 
> > > 
> > > 
> > > I'm wondering whether or not there is a trivial way of getting this 
> > > JamesMailetContext as a bean.
> > > 
> > > Will research tomorrow.
> > > 
> > > 
> > > 
> > > If anyone has any input, please let me know.
> > > 
> > > 
> > > 
> > > -tim
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > On Sat Oct 13 17:05:24 EDT 2012, tim <[email protected]> wrote:
> > > > 
> > > > Ok, I've finally found the JamesMailetContext.
> > > > 
> > > > 
> > > > 
> > > > I guess this is my question, and then I can implement this:
> > > > 
> > > > Is there a way of getting this object from saving from the mailbox?
> > > > 
> > > > 
> > > > 
> > > > I'm pondering just hacking it into a singleton which I can then 
> > > > retrieve get. If I go this route: are there mutliple 
> > > > "JamesMailetContext"s instantiated during the process?
> > > > 
> > > > 
> > > > 
> > > > Thanks in advance,
> > > > 
> > > > 
> > > > 
> > > > -tim
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > On Sat Oct 13 16:37:28 EDT 2012, tim <[email protected]> wrote:
> > > > > 
> > > > > Greetings again,
> > > > > 
> > > > > 
> > > > > 
> > > > > So my plan was to refactor RemoteDelivery, and create a "Retry" 
> > > > > mailet, from which ToRecipients and ToSender would derive.
> > > > > 
> > > > > Of course this doesn't work. Because ToRecipientFolder would retry 
> > > > > all the recipients, so some users would get the mail multiple times.
> > > > > 
> > > > > 
> > > > > 
> > > > > My alternate action would be to modify the repository. But I don't 
> > > > > know how to bounce. Because I don't have a mailet context.
> > > > > 
> > > > > Or I wonder if I can get the mailet context from the config.
> > > > > 
> > > > > 
> > > > > 
> > > > > If anyone has any thoughts, feel free to chime in.
> > > > > 
> > > > > 
> > > > > 
> > > > > Is it possible to bounce a mail without a mailet context?
> > > > > 
> > > > > Is it possible to store a mailet context in a DB?
> > > > > 
> > > > > 
> > > > > 
> > > > > -tim
> > > > > 
> > > > > 
> > > > > 
> > > > > On Sun Oct 07 10:50:50 EDT 2012, tim <[email protected]> wrote:
> > > > > > 
> > > > > > Hey there,
> > > > > > 
> > > > > > I thought I would check if anyone has any input before I go ahead 
> > > > > > and implement this:
> > > > > > 
> > > > > > I need to write to a respository which is sometimes disconnected. 
> > > > > > If it is disconnected at mail-receive time, I need to queue for 
> > > > > > writing and retry later.
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > I plan on implementing this by copying RemoteDelivery, cutting out 
> > > > > > all of the socket stuff, and inserting the custom write to 
> > > > > > repository.
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > Is there some other way I should attempt which would reuse more and 
> > > > > > code less?
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > Thanks,
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > -tim
> > > > > > 
> > > > > >

Reply via email to