如何传送到多个目的地(电子邮件地址和(通过dovecot-lda)邮箱)

我正在使用eximdovecot。 所有用户都是虚拟的,即他们来自数据库。 查找给定的localpart@domain的目标地址可能会产生包含目标邮箱或目标电子邮件地址的多行。

以下路由器可以正常传送所有电子邮件:

 pg_aliases: driver = redirect directory_transport = address_file data = ${sg{\ ${lookup pgsql { SELECT CASE WHEN substr(c_dest, 1, 1) = '/' THEN (c_dest||'@@'||c_domain) ELSE c_dest END FROM aliases WHERE c_local = '${quote_pgsql:$local_part}' AND c_domain = realDomain('${quote_pgsql:$domain}');}}}\ {/(.+)@@(.+)}\ {/var/spool/mail/\$2/\$1/Maildir/}} 

这个“代码”是旧的,最初不是我写的,但它的工作,我明白了为什么:如果目标是一个邮箱( /mailboxname )它将其转换为一个path,这将导致directory_transport被调用。 否则,目标地址将导致redirect驱动程序处理它。

但是,我想现在使用dovecot-lda进行本地交付。

这意味着我需要调用一个传输,然后从$address_data获取邮箱名称和域名,然后传递给它:

 dovecot_lda: driver = pipe command = /usr/libexec/dovecot/dovecot-lda -d ${extract{dest}{$address_data}}@${extract{domain}{$address_data}} -f $sender_address -a $original_local_part@$original_domain ... 

但是,我没有看到使redirect路由器调用该传输的方法。 当除了redirect路由器之外还使用单独的accept路由器时,它将仅传送到第一个目标邮箱,因为它似乎不处理路由器的address_data查找中的多行结果:

 pg_dovecot: driver = accept transport = dovecot_lda condition = ${lookup pgsql { SELECT substr(c_dest, 2) AS dest, c_domain AS domain FROM aliases WHERE c_local = '${quote_pgsql:$local_part}' AND c_domain = realDomain('${quote_pgsql:$domain}') AND substr(c_dest, 1, 1) = '/'; }} address_data = ${lookup pgsql { SELECT substr(c_dest, 2) AS dest, c_domain AS domain FROM aliases WHERE c_local = '${quote_pgsql:$local_part}' AND c_domain = realDomain('${quote_pgsql:$domain}') AND substr(c_dest, 1, 1) = '/'; }} 

我想知道是否有办法解决这个问题。