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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]>
>>>>> 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 <[email protected]>
>>>>>>> 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: [email protected]
>>>>>>>> For additional commands, e-mail: [email protected]
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -----
>>>>>>> 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: [email protected]
>>>>>> For additional commands, e-mail: [email protected]
>>>>>
>>>>>
>>>>>
>>>>> -----
>>>>> 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: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>>
>>>>
>>>> -----
>>>> 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: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>
>