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
>>> 
>> 
> 

Reply via email to