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]