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: exim-users-bounces+abobre=gmail.com@???
>> [mailto:exim-users-bounces+abobre=gmail.com@exim.org] Em nome de James
>> Pettyjohn
>> Enviada em: terça-feira, 27 de agosto de 2013 18:53
>> Para: exim-users@???
>> 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