Em um esforço para obter uma nova perspectiva sobre esse problema, comecei a configurar uma configuração similar de relayhost em outro servidor e foi durante esse processo que finalmente rastreei qual era a origem do problema. Acontece que no meu arquivo sasl_passwd eu estava faltando um personagem crucial.
arquivo sasl_passwd antes da correção:
DomainB.name [email protected]:somepassword
#Fallback
[smtp.mailgun.org]:587 [email protected]:anotherpasswd
arquivo sasl_passwd após a correção:
@DomainB.name [email protected]:somepassword
#Fallback
[smtp.mailgun.org]:587 [email protected]:anotherpasswd
O problema era o único caractere "@" ausente antes do DomainB virtual. A entrada de fallback foi o motivo pelo qual foi tão difícil depurar esse problema, já que todos os e-mails estavam sendo entregues por essa rota quando o Postfix não conseguiu corresponder a nenhuma outra entrada.
Como pode ser útil, também estou incluindo a configuração do meu arquivo de mapas canônicos assim que minha configuração de relayhost começar a funcionar corretamente:
/(.*@)DomainB.name/ ${1}DomainB.name
/(.*@)DomainA.com/ ${1}DomainA.com
O regex acima assegura que o remetente Envelope seja atualizado para corresponder ao remetente De, evitando qualquer "via DomainA" no meu cliente de e-mail.
Como um postscript, verifica-se que no Ubuntu 14.04 não é suficiente ter apenas as seguintes linhas em main.cf:
canonical_maps = regexp:/etc/postfix/canonical
canonical_classes = envelope_sender, header_sender
A seguinte linha também deve ser incluída:
sender_canonical_maps = regexp:/etc/postfix/canonical_sender
O conteúdo do segundo arquivo pode ser idêntico ao primeiro, mas deve estar presente para evitar cabeçalhos "via domínio" ao retransmitir emails no Ubuntu.