web-dev-qa-db-ja.com

postfixとmysqlを使用してコピーを保存しながらメールを転送するにはどうすればよいですか?

古いPleskインストールからiRedMailを実行しているカスタムビルドのUbuntuサーバー(postfix/amavisd/dovecot/etc)にメールを移行しています。

私はすべてのドメインとmysqlバックエンドを管理するためにpostfixadminを使用しています。何かを「エイリアス」したり転送を作成したりする場合、既存のメールボックスを使用できないため、Pleskスタイルの「保存されたコピーでリダイレクト」機能をコピーできないことに気付きました。

私は現在、データベースを介してリモートエイリアスを設定しており、以下を使用しています。

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

データベースを引き続き使用する方法がある場合は、列を追加してクエリを変更する必要がある場合でも、理想的です。

ありがとう!

8
FilmJ

私はこれを理解しました。基本的に、エイリアスを保存するmysqlテーブルを変更して、アドレスごとに複数のエイリアスをサポートするようにする必要があります。これにより、ローカルドメインとリモート電子メールの両方の配信設定が可能になります。

これはこれまでのところ機能しますが、これを試みた一部の人が転送された電子メールアカウントに重複した電子メールを受け取ったと聞きました。これまでのところ、私はこれを経験していません。

私はpostfixadminを使用してアカウントを管理していましたが、この使用法をサポートしていないため、エイリアスを正しく表示、編集、削除できるようにソースコードを変更する必要がありました。

ここでの主な教訓は、mysqlを使用するときに、新しい主キー、つまり「id」を設定することで、単一のキーを複数の結果にマッピングできるが、postfixクエリロジックを同じに保つことです。返される複数の結果は、デフォルトのdbm/bdファイルの複数の結果と同じですが、ある種類の区切られた結果を持つ単一のキーではなく、同じキーで新しいレコードを作成する必要があります。

他のHTH!

これは、mysqlのすべてのマップで機能するはずです。

6
FilmJ

Virtual_mailbox_mapsで定義された仮想アカウントがあり、リダイレクトしてメッセージを保持したい場合は、エイリアスマップに2つのエイリアスを挿入する必要があります。

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

そして、この構文はすべてのメールを[email protected]にリダイレクトし、redirect @ anotherdomain.comにします。さらに、virtual_mailbox_mapsにユーザー[email protected]があるかどうかを確認し、ある場合は保存します。

updateまたは、( @ Tim Heagele コメントを使用しても構いません)

[email protected] [email protected] [email protected] 
6
SledgehammerPL

非常に簡単な解決策は、送信元アドレスを宛先列のコンマ区切りリストに含めることです。例えば。:

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

それは私にとってはうまくいきます。

3
dbdemon

この質問はかなり古いですが、同じ環境(postfix; dovecot; mysql)で同じ状況に遭遇し、次のアプローチを実現しました。

仮想転送構成を格納する新しいdbテーブルを作成しました。

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;

次に、以前に作成した/etc/postfix/mysql-virtual-forward-maps.cfテーブルを照会し、常に連結されたソースと宛先アドレスを返す新しい仮想転送マップファイルvirtual_forwardsを作成しました(メールはエイリアスAND宛先に送信されます)。

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

最後に、新しいマップファイルを/etc/postfix/main.cfvirtual_alias_mapsとして追加しました。

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

Postfixサーバーを再起動すると、すべてが期待どおりに機能するはずです。コンマで区切られたリストをvirtual_aliasesテーブルに追加するのではなく、このアプローチを好んでいます。しかし、それは私の個人的な問題かもしれません:)

同じ送信元アドレスに基づいて複数の転送を追加できない(たとえば、test @ tworabbits => test1 @ tworabbits、test2 @ tworabbits)ことは知っていますが、virtual_forwardsテーブルをvirtual_forward_sourcesおよびvirtual_forward_destinationsに順番に簡単に分割できますその要件を満たすために。

私はこれがさらに5年が経過したときに誰かに役立つことを願っています:)

3
tworabbits

すべてのユーザーのローカルアカウントを持っていますか?

私は。forwardファイルを次のようなもので使用しました:

[email protected], \user

コピーを転送し、ローカルスプールにもコピーを保持します。

2
djhowell

おそらくpostfixのmain.cfからディスパッチする方がよりコーシャです:

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

そして、関連するファイル(recipient-bccとsender-bcc)の例:

@sender.domain a.local@address

ファイルを編集した後、データベースを(再)構築することを忘れないでください。

postmap hash:recipient-bcc
postmap hash:sender-bcc
2
antoszka