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