OK, I made an Eclipse patch for the RemoteDelivery issue. I also made a patch for a mod I made to ReadOnlyUsersLDAPRespository.java that filters LDAP users by an additional filter string specified in the ldap conf file. Details, and patches, available on my blog:
http://blog.bonnydoonmedia.com/post.cfm/patches-for-apache-james-mail-server-3-0-beta5 On Oct 27, 2014, at 2:05 PM, Robert Munn <cfmuns...@gmail.com> wrote: > Forgot one thing. Just above the try{} block, Transport transport is defined. > I changed it to this: > > SMTPTransport transport = null; > > > > On Oct 27, 2014, at 1:54 PM, Robert Munn <cfmuns...@gmail.com> wrote: > >> Here is my code. Import the SMTPTransport class, and replace this: >> >> transport = session.getTransport(outgoingMailServer); >> >> with this: >> >> transport = (SMTPTransport) session.getTransport(outgoingMailServer); >> transport.setLocalHost( props.getProperty("mail.smtp.localhost", heloName) >> ); >> >> I added: >> >> <!-- Set the HELO/EHLO name to use when connectiong to remote >> SMTP-Server --> >> <mail.smtp.localhost>mail.legacyavatar.com</mail.smtp.localhost> >> >> and I have confirmed that it is being picked up by >> props.getProperty(“mail.smtp.localhost”). >> >> >> >> >> On Oct 27, 2014, at 1:23 PM, Robert Munn <cfmuns...@gmail.com> wrote: >> >>> Great stuff. I got the build working as well. I don’t like the fact that >>> we’re forcing it to use SMTPTransport, ruling out using other transport >>> providers, but if you look at the section of the code just below there, you >>> see this: >>> >>> // if the transport is a SMTPTransport (from sun) some >>> // performance enhancement can be done. >>> if (transport.getClass().getName().endsWith(".SMTPTransport")) { >>> >>> so there is a section that is testing the class and adding extensions >>> already. I might wrap the code in a class name check and only call >>> setLocalHost() if I find >>> org.apache.geronimo.javamail.transport.smtp.SMTPTransport. >>> >>> Also, you only need to import that class, not the entire >>> org.apache.geronimo.javamail.transport.smtp.* package. Better for the >>> memory footprint. >>> >>> >>> I will help with jDKIM, I will need to set it up myself. Where to start? >>> >>> >>> >>> On Oct 27, 2014, at 12:29 PM, Jerry Malcolm <techst...@malcolms.com> wrote: >>> >>>> Well, Robert, you get the prize.... It works (finally)! >>>> >>>> Two changes required to RemoteDelivery mailet: >>>> >>>> Add: >>>> import org.apache.geronimo.javamail.transport.smtp.*; >>>> >>>> Right after: >>>> transport = session.getTransport(outgoingMailServer); >>>> >>>> add: >>>> ((org.apache.geronimo.javamail.transport.smtp.SMTPTransport)transport).setLocalHost( >>>> "mail.jwmhosting.com"); >>>> >>>> or be more generic and get the value from props. >>>> >>>> The setLocalHost needs to be right after the object is instantiated since >>>> the HELO is sent on one of the first calls to transport. >>>> >>>> This fixes it (thank you so much for your help). But Geronimo is still >>>> not following the spec and honoring the property mail.smtp.localhost. It >>>> needs to be fixed in a subsequent release. >>>> >>>> Basically everybody using James 3 needs to add this fix to the mailet, at >>>> least if running on a Windows server. Or verify through mail-tester.com >>>> that the HELO is correct. Going back to the orig problem, gmail was not >>>> delivering tons of my mail due to this. >>>> >>>> Thanks again. >>>> >>>> Now.... anybody offer any help on getting jDKIM working? I've got it >>>> implemented and the DNS is set up. But mail-tester is telling me the >>>> signature is invalid. On to the next problem..... >>>> >>>> Jerry >>>> >>>> >>>> >>>> >>>> On 10/27/2014 2:00 PM, Jerry Malcolm wrote: >>>>> The mailet only sees 'transport' which is cast to generic >>>>> "javax.mail.Transport". The localhost methods and connection methods >>>>> are all part of the geronimo impl. You'll need to cast the transport to >>>>> the geronimo package for the class, then see if you can get the >>>>> connection object from the transport. Might work. But non-trivial. >>>>> I'll play around with that was well. >>>>> >>>>> Jerry >>>>> >>>>> On 10/27/2014 1:41 PM, Robert Munn wrote: >>>>>> Here is the base code. Note localHost is a property of the >>>>>> MailConnection class. Note also that there is a setLocalHost() method. I >>>>>> am going to try setting the localhost property from RemoteDelivery using >>>>>> setLocalHost( localHost ). >>>>>> >>>>>> public String getLocalHost() throws MessagingException { >>>>>> if (localHost == null) { >>>>>> >>>>>> try { >>>>>> localHost = InetAddress.getLocalHost().getHostName(); >>>>>> } catch (UnknownHostException e) { >>>>>> // fine, we're misconfigured - ignore >>>>>> } >>>>>> >>>>>> if (localHost == null) { >>>>>> localHost = props.getProperty(MAIL_LOCALHOST); >>>>>> } >>>>>> >>>>>> if (localHost == null) { >>>>>> localHost = props.getSessionProperty(MAIL_LOCALHOST); >>>>>> } >>>>>> >>>>>> if (localHost == null) { >>>>>> throw new MessagingException("Can't get local hostname. " >>>>>> + " Please correctly configure JDK/DNS or set >>>>>> mail.smtp.localhost"); >>>>>> } >>>>>> } >>>>>> >>>>>> return localHost; >>>>>> } >>>>>> >>>>>> /** >>>>>> * Explicitly set the local host information. >>>>>> * >>>>>> * @param localHost >>>>>> * The new localHost name. >>>>>> */ >>>>>> public void setLocalHost(String localHost) { >>>>>> this.localHost = localHost; >>>>>> } >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Oct 27, 2014, at 11:28 AM, Jerry Malcolm <techst...@malcolms.com> >>>>>> wrote: >>>>>> >>>>>>> mailet calls 'transport' which is an "SMTPTransport" instance. >>>>>>> SMTPTransport calls SMTPConnection.getLocalHost() which is inherited >>>>>>> from MailConnection.getLocalHost(). >>>>>>> >>>>>>> That method returns the InetAddress().getLocalHost().getHostName() >>>>>>> first. According to the spec, that should only occur IF the property >>>>>>> mail.smtp.localhost is not set. So i think the fix should be in that >>>>>>> method. >>>>>>> >>>>>>> The very first thing in the MailConnection.getLocalHost() method should >>>>>>> be something like: >>>>>>> --------------------------------------- >>>>>>> if ( props.getProperty( "mail.smtp.localhost" ) != null ) return( >>>>>>> props.getProperty( "mail.smtp.localhost" )); >>>>>>> --------------------------------------- >>>>>>> Then let it try all of the other options if and only if this property >>>>>>> is NOT set. >>>>>>> >>>>>>> Jerry >>>>>>> >>>>>>> On 10/27/2014 1:07 PM, Robert Munn wrote: >>>>>>>> More info. SMPTConnection.java extends MailConnection.java which has a >>>>>>>> method with this signature: >>>>>>>> >>>>>>>> public boolean protocolConnect(String host, int port, String username, >>>>>>>> String password) throws MessagingException >>>>>>>> >>>>>>>> If you fail to pass ‘host’ as an argument to the method, the host >>>>>>>> defaults to ‘localhost’. A patch could be made there. A better patch >>>>>>>> would be to find the upstream code that is calling this method and >>>>>>>> patch it to send the correct hostname. I am hunting for that location, >>>>>>>> please let me know if you have any suggestions... >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Oct 27, 2014, at 10:25 AM, Jerry Malcolm <techst...@malcolms.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Thanks for jumping in and investigating. This has gone from ugly to >>>>>>>>> horrible.... I think I have found the culprit. >>>>>>>>> >>>>>>>>> I first had to figure out who is providing the class for >>>>>>>>> SMTPTransport. figured out that the package for SMTPTransport is: >>>>>>>>> org.apache.geronimo.javamail.transport.smtp. So it is NOT a base JVM >>>>>>>>> implementation.... It's apache, and I am about to withdraw my >>>>>>>>> statement that 'surely the transport class couldn't be ignoring a >>>>>>>>> property"..... >>>>>>>>> >>>>>>>>> Geronimo's SMTPTransport.java uses a class SMTPConnection which >>>>>>>>> actually returns the localhost name. And... no surprise at this >>>>>>>>> point, it totally ignores the mail.smtp.localhost property. The >>>>>>>>> property doesn't even appear anywher in the class. First line in >>>>>>>>> getLocalHost() pulls the InetAddress.getLocalHost().getHostName() >>>>>>>>> value. >>>>>>>>> >>>>>>>>> So.... half the problem is done... we know the culprit. Now I guess >>>>>>>>> (oh joy....) I get to download the whole geronimo package, set up a >>>>>>>>> build process, fix the code, and replace the jar on my server. (yuck). >>>>>>>>> >>>>>>>>> That is... unless someone already has a VERY quick way to patch and >>>>>>>>> rebuild geronimo..... Looking for volunteers.... :-) >>>>>>>>> >>>>>>>>> In the meantime, I will also try adding that JVM parameter to try to >>>>>>>>> override the Win Server machine name. >>>>>>>>> >>>>>>>>> Still open to other suggestions for quicker workaround..... >>>>>>>>> >>>>>>>>> Thanks. >>>>>>>>> >>>>>>>>> Jerry >>>>>>>>> >>>>>>>>> --------------------------------------------------------------------- >>>>>>>>> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >>>>>>>>> For additional commands, e-mail: server-user-h...@james.apache.org >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ----- >>>>>>>> No virus found in this message. >>>>>>>> Checked by AVG - www.avg.com >>>>>>>> Version: 2015.0.5315 / Virus Database: 4189/8462 - Release Date: >>>>>>>> 10/27/14 >>>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >>>>>>> For additional commands, e-mail: server-user-h...@james.apache.org >>>>>> >>>>>> >>>>>> >>>>>> ----- >>>>>> No virus found in this message. >>>>>> Checked by AVG - www.avg.com >>>>>> Version: 2015.0.5315 / Virus Database: 4189/8463 - Release Date: 10/27/14 >>>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >>>>> For additional commands, e-mail: server-user-h...@james.apache.org >>>>> >>>>> >>>>> >>>>> ----- >>>>> No virus found in this message. >>>>> Checked by AVG - www.avg.com >>>>> Version: 2015.0.5315 / Virus Database: 4189/8462 - Release Date: 10/27/14 >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >>>> For additional commands, e-mail: server-user-h...@james.apache.org >>>> >>> >> >