I looked through the code there and it looks like this is not far off,
smtp.c line 2860:
if (!smtp_get_interface(ob->interface, host_af, addrlist,
&ifchanges,
&interface, tid))
return FALSE;
if (ifchanges) pistring = string_sprintf("%s/%s", pistring,
interface);
So it picks the right interface from a list of interfaces and
differentiates the
retries for one transport. In my case every transport has a different
IP and
each user is assigned to a transport.
Looks like it needs to be changed to something like:
if (ifchanges || RETRY_INCLUDE_INTERFACE &&interface != NULL) pistring
= string_sprintf("%s/%s", pistring, interface);
Signatures don't look like they need to change.
On 2013-08-28 06:37, Todd Lyons wrote:
-----Mensagem original-----
De: [email protected]
[mailto:[email protected]] Em nome de James
Pettyjohn
Enviada em: terça-feira, 27 de agosto de 2013 18:53
Para: [email protected]
Assunto: Re: [exim] RES: Retry hints for multiple outbound IP
addresses
Thanks Andre. I already have the multiple IPs working though.
The point of the setup is to segment the senders, as one would in a
dedicated IP.
Much like what is offered through your major bulk mail senders. But
as gone over everybody seems to get penalized in the following manner:
- ip address 10.1.1.1. sends to many messages too to AOL who then
temporarily blocks his IP address.
- Exim decides not to retry AOL because it blocking 10.1.1.1
- 10.1.1.2 tries to send to AOL, exim doesn't try because it's
hints indicate it's not time yet but it's based on the
OUTBOUND IP of 10.1.1.1
I don't have time to work on this, but I think anybody with a little c
fu could probably make an adjustment to fix this in src/retry.c:
1. The code to generate the key that it stores in the database looks
like this:
BOOL
retry_check_address(uschar *domain, host_item *host, uschar
*portstring,
BOOL include_ip_address, uschar **retry_host_key, uschar
**retry_message_key)
{
<snip>
/* Generate the host key for the unusable tree and the retry database.
Ensure
host names are lower cased (that's what %S does). */
host_key = include_ip_address?
string_sprintf("T:%S:%s%s", host->name, host->address, portstring) :
string_sprintf("T:%S%s", host->name, portstring);
...You would need to modify this to include the intended outbound IP
address that is being used. Of course, you don't know this until the
message has already been routed and is in the transport, which may
mean it's not possible. I haven't looked at this enough to know that.
2. The only spot that calls this function is in src/transports/smtp.c,
so you only need to change the call in one spot to include the
intended outbound IP (if it's not already in one of those variables
being passed, or in some module wide variable or global variable).
3. For a formal implementation, if I could get the above to work per
outbound IP, I would probably create a global variable to turn on or
off this retry hint behavior, with the default of off.
At least, that's what I would try to do.
...Todd
--
The total budget at all receivers for solving senders' problems is $0.
If you want them to accept your mail and manage it the way you want,
send it the way the spec says to. --John Levine
--
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/