Como posso encaminhar e-mails enquanto salvo uma cópia usando o postfix e o mysql?

7

Estou migrando e-mails de instalações antigas do Plesk para um servidor Ubuntu personalizado que executa o iRedMail (postfix / amavisd / dovecot / etc).

Estou usando o postfixadmin para administrar todos os domínios e um backend do mysql. Percebi que, se eu quiser "alias" algo ou criar um encaminhamento, não posso usar uma caixa de correio existente - por isso não posso copiar o recurso "redirecionar com cópia salva" no estilo do Plesk.

Atualmente, estou configurando aliases remotos por meio de um banco de dados e usando:

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

Se ainda houver uma maneira de usar meu banco de dados, seria ideal - mesmo que eu tenha que adicionar algumas colunas e alterar a consulta.

Obrigado!

    
por FilmJ 09.09.2009 / 00:06

6 respostas

6

Eu percebi isso. Basicamente eu preciso modificar a tabela mysql que salva os aliases para que ele suporte múltiplos aliases por endereço, possibilitando a configuração da entrega tanto para o domínio local quanto para um email remoto.

Isso funciona até agora, embora eu tenha ouvido falar que algumas pessoas que tentaram isso conseguiram e-mails duplicados para a conta de e-mail encaminhada. Até agora, eu não experimentei isso.

Eu estava usando o postfixadmin para gerenciar as contas, mas ele não suporta esse uso, então tive que modificar o código-fonte, para que ele exibisse, editasse e excluísse aliases corretamente.

A principal lição aqui é que ao usar o mysql, uma única chave pode ser mapeada para múltiplos resultados, definindo uma nova chave primária, ou seja, "id", mas mantendo a lógica da consulta do postfix igual. Os vários resultados retornados são iguais aos resultados múltiplos nos arquivos dbm / bd padrão, exceto que você deve criar um novo registro com a mesma chave em vez de uma única chave com algum tipo de resultado delimitado.

HTH outros!

Isso deve funcionar com qualquer mapa no mysql.

    
por 24.09.2009 / 11:14
4

Se você tiver uma conta virtual definida em virtual_mailbox_maps e quiser redirecionar AND keep message, será necessário inserir dois aliases no alias map:

[email protected] [email protected]
[email protected] [email protected]

E esta sintaxe redirecionará todos os e-mails para [email protected] para [email protected] E verificará se você tem o usuário [email protected] em virtual_mailbox_maps e, em caso afirmativo, salve-o.

atualização Ou você pode até usar ( @Tim Heagele obrigado pelo comentário)

[email protected] [email protected] [email protected] 
    
por 15.03.2016 / 00:36
3

A solução muito simples é incluir o endereço de origem em uma lista separada por vírgula na coluna de destino. Por exemplo:

insert into virtual_aliases (domain_id, source, destination) 
values (1, '[email protected]', '[email protected],[email protected]');

Isso funciona para mim.

    
por 04.04.2015 / 17:05
2

Você tem contas locais para todos os usuários?

Eu usei um arquivo .forward com algo como:

[email protected], \user

que encaminha uma cópia e também mantém uma cópia no spool local.

    
por 09.09.2009 / 00:14
2

Provavelmente é mais kosher enviar do postfix 'main.cf:

Diga, em main.cf:

### let's archive some incoming/outgoing mail:
recipient_bcc_maps = hash:/etc/postfix/recipient-bcc
sender_bcc_maps    = hash:/etc/postfix/sender-bcc

e nos arquivos relevantes (recipient-bcc e sender-bcc) por exemplo:

@sender.domain a.local@address

Não esqueça de (re) construir os bancos de dados depois de editar os arquivos:

postmap hash:recipient-bcc
postmap hash:sender-bcc
    
por 09.09.2009 / 01:32
2

Essa pergunta é bem antiga, mas eu corri para a mesma situação com o mesmo ambiente (postfix; dovecot; mysql) e percebi a seguinte abordagem:

Eu criei uma nova tabela do banco de dados que armazena minhas configurações de encaminhamento virtual:

CREATE TABLE 'virtual_forwards' (
  'id' int(11) NOT NULL auto_increment,
  'domain_id' int(11) NOT NULL,
  'source' varchar(100) NOT NULL,
  'destination' varchar(100) NOT NULL,
  PRIMARY KEY ('id'),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Eu então criei um novo arquivo de mapa de encaminhamento virtual /etc/postfix/mysql-virtual-forward-maps.cf que consulta a virtual_forwards table criada anteriormente E sempre retorna a origem concatenada e o endereço de destino (o email será enviado para o alias AND destination):

user = mailuser
password = <PASS>
hosts = 127.0.0.1
dbname = <DB_NAME>
query = SELECT CONCAT(source, ',', destination) FROM virtual_forwards WHERE source='%s'

E finalmente adicionei o novo arquivo de mapa ao meu /etc/postfix/main.cf as virtual_alias_maps :

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-virtual-forward-maps.cf

Reinicie seu servidor postfix e tudo funcionará como esperado. Eu sou a favor dessa abordagem contra adicionar uma lista separada por vírgulas à tabela virtual_aliases , já que isso parece errado para mim. Mas isso pode ser meu problema pessoal:)

Estou ciente do fato de que não posso adicionar múltiplos encaminhamentos com base no mesmo endereço de origem (por exemplo, test @ tworabbits = > test1 @ tworabbits, test2 @ tworabbits), mas é possível dividir facilmente a tabela virtual_forwards em virtual_forward_sources AND virtual_forward_destinations para satisfazer esse requisito.

Espero que isso ajude alguém quando outros cinco anos se passaram :) Felicidades!

    
por 06.08.2015 / 11:28