You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-user@james.apache.org by Eric Charles <er...@apache.org> on 2015/03/01 09:50:09 UTC

Re: James 3 b4 HELO Override Not Working?

Can you open a JIRA and upload your patches there?

On 10/28/2014 12:11 AM, Robert Munn wrote:
> 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 <cf...@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 <cf...@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 <cf...@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 <te...@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 <te...@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 <te...@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-unsubscribe@james.apache.org
>>>>>>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
>>>>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
>>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-user-help@james.apache.org
>>>>>
>

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


Re: James 3 b4 HELO Override Not Working?

Posted by Robert Munn <ro...@gmail.com>.
tickets created and patch files uploaded.

On Mar 3, 2015, at 1:09 PM, Robert Munn <ro...@gmail.com> wrote:

> ok
> 
> On Mar 1, 2015 12:51 AM, "Eric Charles" <er...@apache.org> wrote:
> Can you open a JIRA and upload your patches there?
> 
> On 10/28/2014 12:11 AM, Robert Munn wrote:
> > 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 <cf...@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 <cf...@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 <cf...@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 <te...@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 <te...@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 <te...@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-unsubscribe@james.apache.org
> >>>>>>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
> >>>>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
> >>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
> >>>>> For additional commands, e-mail: server-user-help@james.apache.org
> >>>>>
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-user-unsubscribe@james.apache.org
> For additional commands, e-mail: server-user-help@james.apache.org
> 


Re: James 3 b4 HELO Override Not Working?

Posted by Robert Munn <ro...@gmail.com>.
ok
On Mar 1, 2015 12:51 AM, "Eric Charles" <er...@apache.org> wrote:

> Can you open a JIRA and upload your patches there?
>
> On 10/28/2014 12:11 AM, Robert Munn wrote:
> > 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 <cf...@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 <cf...@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 <cf...@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 <te...@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 <
> techstuff@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 <
> techstuff@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-unsubscribe@james.apache.org
> >>>>>>>>>> For additional commands, e-mail:
> server-user-help@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-unsubscribe@james.apache.org
> >>>>>>>> For additional commands, e-mail:
> server-user-help@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-unsubscribe@james.apache.org
> >>>>>> For additional commands, e-mail: server-user-help@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-unsubscribe@james.apache.org
> >>>>> For additional commands, e-mail: server-user-help@james.apache.org
> >>>>>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-user-unsubscribe@james.apache.org
> For additional commands, e-mail: server-user-help@james.apache.org
>
>