I'm using James 2.3.1.
I tried using mail.smtp.localaddress but couldn't make it work
On Wed, Sep 24, 2008 at 4:18 PM, Stefano Bagnara <[EMAIL PROTECTED]> wrote:
> Leandro Bertolami ha scritto:
>
>> I finally solved it.
>> I changed the RemoteDelivery.java and recompiled James. Finally it's
>> sending
>> mails from different ips.
>>
>> Here is what I changed (line 1092 of RemoteDelivery.java) :
>> if (isBindUsed) {
>> // undocumented JavaMail 1.2 feature, smtp transport will use
>> // our socket factory, which will also set the local address
>> props.put("mail.smtp.localaddress", bindAddress);
>> //mail.smtp.localaddr
>> /*props.put("mail.smtp.socketFactory.class",
>>
>> "org.apache.james.transport.mailets.RemoteDeliverySocketFactory");
>> // Don't fallback to the standard socket factory on error, do
>> throw an exception
>> props.put("mail.smtp.socketFactory.fallback", "false");*/
>> }
>> Basically I, added *props.put("mail.smtp.localaddress", bindAddress); *and
>> commented the socketFactory props.
>>
>> Thanks for your help guys!
>>
>
> This should be the same as NOT using <bind> and using
> <mail.smtp.localaddress> in your mailets.
>
> What version of james are you using?
>
> Stefano
>
>
> On Wed, Sep 24, 2008 at 5:02 AM, Stefano Bagnara <[EMAIL PROTECTED]> wrote:
>>
>> Leandro Bertolami ha scritto:
>>>
>>> Stefano,
>>>
>>>> Thanks for your response. I tried removing the bind parameter and adding
>>>> mail.smtp.localaddr but still cant make it work.
>>>>
>>>> Here is the config
>>>>
>>>> <mailet match="SubjectIs=xxx.xxx.xxx.91" class="RemoteDelivery">
>>>> <outgoing>file://var/mail/outgoing-91/</outgoing>
>>>> <mail.smtp.localaddr>xxx.xxx.xxx.91</mail.smtp.localaddr>
>>>>
>>>> <delayTime> 5 minutes </delayTime>
>>>> <delayTime> 10 minutes </delayTime>
>>>> <delayTime> 45 minutes </delayTime>
>>>> <delayTime> 2 hours </delayTime>
>>>> <delayTime> 3 hours </delayTime>
>>>> <delayTime> 6 hours </delayTime>
>>>> <maxRetries> 25 </maxRetries>
>>>> <deliveryThreads> 1 </deliveryThreads>
>>>> <sendpartial>false</sendpartial>
>>>> <bounceProcessor>bounces</bounceProcessor>
>>>> </mailet>
>>>>
>>>> <mailet match="SubjectIs=xxx.xxx.xxx.90" class="RemoteDelivery">
>>>> <outgoing>file://var/mail/outgoing/</outgoing>
>>>> <mail.smtp.localaddr>xxx.xxx.xxx.90</mail.smtp.localaddr>
>>>> <delayTime> 5 minutes </delayTime>
>>>> <delayTime> 10 minutes </delayTime>
>>>> <delayTime> 45 minutes </delayTime>
>>>> <delayTime> 2 hours </delayTime>
>>>> <delayTime> 3 hours </delayTime>
>>>> <delayTime> 6 hours </delayTime>
>>>> <maxRetries> 25 </maxRetries>
>>>> <deliveryThreads> 1 </deliveryThreads>
>>>> <sendpartial>false</sendpartial>
>>>> <bounceProcessor>bounces</bounceProcessor>
>>>> </mailet>
>>>>
>>>> It sends both mails from the .90 IP, but with this config it's working
>>>> ok
>>>> (but only for 2 ip's, I tried with 3 but didn work)
>>>>
>>>> <mailet match="SubjectIs=xxx.xxx.xxx.91" class="RemoteDelivery">
>>>> <outgoing>file://var/mail/outgoing-91/</outgoing>
>>>> <bind>xxx.xxx.xxx.91</bind>
>>>> ...
>>>> </mailet>
>>>>
>>>>
>>>> <mailet match="SubjectIs=xxx.xxx.xxx.90" class="RemoteDelivery">
>>>> <outgoing>file://var/mail/outgoing/</outgoing>
>>>> <mail.smtp.localaddr>xxx.xxx.xxx.90</mail.smtp.localaddr>
>>>> ...
>>>> </mailet>
>>>>
>>>> If I add this to the mailets, the mals for .92 came with the IP .90.
>>>>
>>>> <mailet match="SubjectIs=206.212.241.92" class="RemoteDelivery">
>>>> <outgoing> file://var/mail/outgoing-92/ </outgoing>
>>>> <mail.smtp.localaddr>206.212.241.92</mail.smtp.localaddr>
>>>>
>>>>
>>>> I think I'm getting closer. Any Ideas?
>>>>
>>>> Thanks again for your time!
>>>>
>>>> Hi Leandro,
>>>
>>> I just had a fast review of javamail code and it seems that the
>>> mail.smtp.localaddr configuration should work... BUT
>>>
>>> I read in javamail docs that if a mail.smtp.localhost configuration is
>>> present then it override in some case the mail.smtp.localaddr, and indeed
>>> we
>>> have this code in the RemoteDelivery:
>>>
>>> //Set the hostname we'll use as this server
>>> if (getMailetContext().getAttribute(Constants.HELLO_NAME) != null)
>>> {
>>> props.put("mail.smtp.localhost",
>>> getMailetContext().getAttribute(Constants.HELLO_NAME));
>>> } else {
>>> String defaultDomain = (String)
>>> getMailetContext().getAttribute(Constants.DEFAULT_DOMAIN);
>>> if (defaultDomain != null) {
>>> props.put("mail.smtp.localhost", defaultDomain);
>>> }
>>> }
>>>
>>> But this mail.smtp.localhost should only be used by javamail for the HELO
>>> command and not for the IP used as source of the connection.
>>>
>>> Javamail uses the com.sun.mail.util.SocketFetcher class to retrieve the
>>> socket. You could try writing a small test for SocketFetcher to see if it
>>> correctly uses the bind to the local ip.
>>>
>>>
>>> Stefano
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>