> On Mar 21, 2017, at 12:46 PM, Carlo Poggiarelli <c.poggiare...@gmail.com> 
> wrote:
> 
> An exchange server sends to postfix an email with multiple addresses
> in the to field.  This message should be sent to an sms gateway that
> accepts one address only in the to field. If ti receives an email with
> multiple addresses, it sends the sms message to the first addresses in
> the to field only discarding the others.

The SMS gateway is rather badly implemented.  Email must not be routed
based on the content of the To: or Cc: headers.  However, if you cannot
repair or replace the SMS gateway, it is possible to work around this in
Postfix.

    main.cf:
        indexed = ${default_database_type}:${config_directory}/
        transport = ${indexed}transport
        sms_destination_recipient_limit = 1
        sms_destination_concurrency_limit = 2

   transport:
        sms.example     sms
        sms.invalid     realsms

   master.cf:
        sms unix - n n - 20 pipe
            flags=Dq user=nobody null_sender= argv=/some/script ${sender} 
${user}
        realsms ... 

   /some/script:
   #! /bin/sh
   (
      printf "From: %s\nTo: %s\n" "$@"
      perl -ne '
        BEGIN { $header = 1; $buf = "" }
        sub doheader { 
            print $buf if ($buf ne "" && $buf !~ m{^to:}i);
            $buf = "";
        }
        s/\r+$//
        if (/^$/) { header(); $header = 0; }
        if (! $header) { print; next; }
        doheader() if (m{^\S});
        $buf .= $_;
        '
    ) | sendmail -f "$1" -- "$2@sms.invalid"

It remains to define a suitable "realsms" transport.  If
that's SMTP, you may also need to apply smtp_generic_maps
to rewrite the envelope recipient back from "@sms.invalid"
to "@sms.example".  (Note "sms.example" is not the real
domain to use, replace as appropriate).

Keep in mind you may need to debug and fine-tune this, it is
not a tested or necessarily complete recipe.

-- 
        Viktor.

Reply via email to