Quando o postfix recebe e-mails recebidos, basicamente ele pode ser dividido em três processos:
- Receber e-mail fazendo transações SMTP com o servidor de e-mail do remetente e aplicar restrições de SMTP, por exemplo: verifique se o destinatário existe
- Armazene o email enviando-o para um dos agentes de entrega (dovecot, local, virtual)
Com base em dois processos acima, o parâmetro virtual_mailbox_maps tem (pelo menos) duas funções:
- Como validação de destinatário, quando postfix que recebe e-mail para o postfix pode rejeitar o destinatário não-existente. Essas verificações foram realizadas quando
reject_unauth_destination
chamado. - O parâmetro em que o agente de entrega virtual virtual (8) procura a localização da caixa de correio. O parâmetro
$virtual_mailbox_base
é incondicionalmente incluído neste caminho, portanto, o caminho absoluto do armazenamento de maildir é$virtual_mailbox_base$virtual_mailbox_maps
.
A segunda função só será usada se você configurou o postfix para enviar email para virtual
delivery agent. Com base no tutorial que você postou acima, o postfix usará dovecot
delivery agent em vez de virtual
.
virtual_transport = dovecot
Como o dovecot-lda que envia o e-mail, o virtual_mailbox_maps
não era usado neste estágio (como armazenar e-mails) . Em vez da configuração do postfix, o dovecot usará este parâmetro
mail_location = maildir:/var/mail/vmail/%d/%n/mail:LAYOUT=fs
determina onde armazenar o email.
Where is it documented that the format of the $virtual_mailbox_maps file is "address address" and that the second must match the first in order for SMTP to work (note: This is based on my empirical observations)?
O parâmetro virtual_mailbox_maps
deve ser constituído por uma ou mais tabelas de pesquisa .
. Todas as tabelas de consulta do Postfix armazenam informações como pares (chave, valor). É por isso que o arquivo virtual_mailbox_maps
consiste em duas colunas: o lado esquerdo é para chave e o direito é para valor.
A maioria das tabelas de pesquisa do Postfix são usadas para procurar informações. Por exemplo, o agente de entrega virtual usa virtual_mailbox_maps
para procurar o caminho da caixa de correio do destinatário. Portanto, o lado direito da sua tabela de hash deve especificar o caminho.
Com algumas tabelas, no entanto, o O Postfix precisa saber apenas se a chave de pesquisa existir
. Qualquer valor de resultado de pesquisa não vazio pode ser usado aqui: o resultado da pesquisa não é usado. Por exemplo, o smtpd usa virtual_mailbox_maps
para verificar se o destinatário existe.
Então, na verdade, você pode colocar qualquer entrada no lado direito de virtual_mailbox_maps
, pois o postfix não a usará. Não há formato como "endereço de endereço" neste caso.
When I replaced the
$virtual_mailbox_maps
entry by, for example, [email protected] OK, and delivery worked, but sending email failed (with Sender address rejected: not owned by user)
Isso porque você tem esse parâmetro em main.cf
smtpd_sender_restrictions = reject_unknown_sender_domain,
reject_sender_login_mismatch
smtpd_sender_login_maps = $virtual_mailbox_maps
Quando tiver reject_sender_login_mismatch
e smtpd_sender_login_maps
, o postfix verificará se seu nome de usuário SASL mapeou para o remetente fornecido quando você envia o e-mail. Portanto, o formato de smtpd_sender_login_maps = $virtual_mailbox_maps
deve consistir em:
[email protected] [email protected]
No seu caso, [email protected] = [email protected], é por isso que você precisa colocar "endereço" no seu $virtual_mailbox_maps
.
É claro que você pode fornecer smtpd_sender_login_maps
com tabela diferente com virtual_mailbox_maps
. Mas o autor do artigo decidiu unificá-los. Talvez o motivo seja que você só precisa alterar um arquivo para adicionar / remover o destinatário válido