I'm having issues with headers and body variables returning null when called in 
router conditions. My goal is to select a router/transport based on either:

- A string appearing in the body of the email (preferred), or
- The value of a custom header

For example, if I have the string "router:1" in the email body I want to use a 
particular router with a condition that searches for router:1 in $message_body.

Here's are my two defined routers:

send_via_extsmtp:
  driver = manualroute
  domains = ! +local_domains
  transport = extsmtp_smtp
  route_list = "* mail.optonline.net::587 byname"
  host_find_failed = defer
  condition = ${if match{$message_body}{router:1}}
  headers_add = "X-ROUTER-TEST: ${if match{$message_body}{router:1}}"
  no_more
  
send_via_extsmtp_nofilter:
  driver = manualroute
  domains = ! +local_domains
  transport = extsmtp_smtp_nofilter
  route_list = "* mail.optonline.net::587 byname"
  host_find_failed = defer
  condition = ${if match{$message_body:}{router:2}}
  no_more


The $message_body is seemingly always null. Here's what it outputs in the debug 
log:

15:49:54 71560 checking "condition"
15:49:54 71560 expanding: NULL
15:49:54 71560    result: NULL
15:49:54 71560 considering bool_lax: NULL
15:49:54 71560 expanding: $message_body
15:49:54 71560    result:
15:49:54 71560 expanding: router:1
15:49:54 71560    result: router:1
15:49:54 71560 condition: match{$message_body}{router:1}
15:49:54 71560    result: false
15:49:54 71560 expanding: ${if match{$message_body}{router:1}}
15:49:54 71560    result:
15:49:54 71560 considering bool_lax: <empty>
15:49:54 71560 condition: and{{bool_lax{NULL}}{bool_lax{${if 
match{$message_body}{router:1}}}}}
15:49:54 71560    result: false
15:49:54 71560 expanding: ${if and{{bool_lax{NULL}}{bool_lax{${if 
match{$message_body}{router:1}}}}}}
15:49:54 71560    result:
15:49:54 71560 send_via_extsmtp router skipped: condition failure

I've tried the same thing with headers and it's always NULL and the condition 
always fails.

Oddly, it's not empty when I copy the same exact condition to headers_add:
  headers_add = "X-ROUTER-TEST: ${if match{$message_body}{router:1}}"

The email is sent with the header: 
X-ROUTER-TEST: true

This condition also works in a system_filter.

It seems the only place I'm not seeing it is in the condition router config.

Is there something obvious that I'm missing? Should I handle this another way?

Thanks!
Jeff


-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim 
details at http://www.exim.org/ ##

Reply via email to