Wie kann ich E-Mails weiterleiten, während ich eine Kopie mit Postfix und MySQL speichere?


8

Ich migriere E-Mails von alten Plesk-Installationen auf einen benutzerdefinierten Ubuntu-Server, auf dem iRedMail ausgeführt wird (postfix / amavisd / dovecot / etc).

Ich verwende postfixadmin, um alle Domänen und ein MySQL-Backend zu verwalten. Ich habe festgestellt, dass ich, wenn ich etwas "aliasen" oder eine Weiterleitung erstellen möchte, kein vorhandenes Postfach verwenden kann. Daher kann ich nicht über die Plesk-ähnliche Funktion "Umleiten mit gespeicherter Kopie" kopieren.

Ich setze derzeit Remote-Aliase über eine Datenbank und verwende:

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

Wenn es eine Möglichkeit gibt, meine Datenbank weiterhin zu verwenden, ist dies ideal - auch wenn ich einige Spalten hinzufügen und die Abfrage ändern muss.

Vielen Dank!

Antworten:


6

Ich habe das herausgefunden. Grundsätzlich muss ich die MySQL-Tabelle, in der die Aliase gespeichert sind, so ändern, dass mehrere Aliase pro Adresse unterstützt werden, sodass die Zustellung sowohl für die lokale Domäne als auch für eine Remote-E-Mail eingerichtet werden kann.

Dies funktioniert bisher, obwohl ich gehört habe, dass einige Leute, die dies versuchen, doppelte E-Mails an das weitergeleitete E-Mail-Konto erhalten haben. Bisher habe ich das noch nicht erlebt.

Ich habe postfixadmin zum Verwalten der Konten verwendet, diese Verwendung wird jedoch nicht unterstützt. Daher musste ich den Quellcode so ändern, dass Aliase ordnungsgemäß angezeigt, bearbeitet und gelöscht werden.

Die wichtigste Lektion hier ist, dass bei Verwendung von MySQL ein einzelner Schlüssel mehreren Ergebnissen zugeordnet werden kann, indem ein neuer Primärschlüssel festgelegt wird, dh "id", aber Ihre Postfix-Abfragelogik gleich bleibt. Die mehreren zurückgegebenen Ergebnisse entsprechen den mehreren Ergebnissen in den Standard-DBM / BD-Dateien, mit der Ausnahme, dass Sie einen neuen Datensatz mit demselben Schlüssel erstellen müssen und nicht nur einen einzelnen Schlüssel mit einem begrenzten Ergebnis.

HTH andere!

Dies sollte mit allen Karten in MySQL funktionieren.


Mit anderen Worten, wenn diese SQL-Abfrage mehrere Werte zurückgibt, ist alles koscher, das Speichern und Weiterleiten funktioniert:query = SELECT destination FROM virtual_aliases WHERE source='%s'
Greg

Verwirrend zu lesen - ich verstehe es zu verstehen. Muss irgendwie visualisiert werden.
TheStoryCoder

6

Wenn Sie ein virtuelles Konto in virtual_mailbox_maps definiert haben und die Nachricht umleiten UND behalten möchten, müssen Sie zwei Aliase in die Aliaszuordnung einfügen:

account@example.com redirect@anotherdomain.com
account@example.com account@example.com

Diese Syntax leitet alle E-Mails an account@example.com an redirect@anotherdomain.com weiter UND prüft, ob Sie den Benutzer account@example.com in virtual_mailbox_maps haben, und wenn ja, speichern Sie diese.

Update Oder Sie können sogar verwenden ( @ Tim Heagele danke für den Kommentar)

account@example.com account@example.com redirect@anotherdomain.com 

3
es kann in einer Reihe sein: account@example.com account@example.com redirect@anotherdomain.com
Tim Haegele

Ihre Lösung funktioniert für mich, aber unter der Adresse "redirect@anotherdomain.com" erhalte ich eine Kopie der Nachricht ... eine Idee?
Pioz

Es hat funktioniert von account@example.com redirect@anotherdomain.com,account@example.com. Vielen Dank :)
tbutcaru

3

Haben Sie lokale Konten für alle Benutzer?

Ich habe eine .forward- Datei mit folgenden Elementen verwendet:

user@new-mail-server.example.com, \user

Dadurch wird eine Kopie weitergeleitet und eine Kopie wird auch in der lokalen Spool gespeichert.


Ich verwende MySQL und die Domänen haben keine lokalen Konten, sondern nur virtuelle Postfächer. Gibt es eine andere Möglichkeit, dies mithilfe meiner Datenbank zu tun? Verwenden Sie im Idealfall: virtual_alias_maps = mysql: /etc/postfix/mysql_virtual_alias_maps.cf
FilmJ

Diese! Legen Sie es in den Home-Ordner des Benutzers, in dem der "Benutzer" \userder Benutzername ist. Vorher habe ich virtuelle Alias-Maps verwendet, was für meinen Anwendungsfall wirklich nicht richtig war. Ich musste sie nicht nur so account@mydomain.org account@mydomain.org externalaccount@externaldomain.com ausschreiben: und Postfix für jede Änderung erneut aufbereiten und neu starten, sondern Sie mussten es auch auf Alias- Ebene tun ! Und ich denke, es hat vor den grundlegenden Anti-Spam-Regeln begonnen. Natürlich haben wir unsere IP fast sofort von Outlook blockiert. Ich verwende das Mail-Stack-Delivery-Paket für Ubuntu 18.04.
Will Matheson

3

Die sehr einfache Lösung besteht darin, die Quelladresse in eine durch Kommas getrennte Liste in der Zielspalte aufzunehmen. Z.B:

insert into virtual_aliases (domain_id, source, destination) 
values (1, 'account1@domain1.com', 'account1@domain1.com,account2@domain2.com');

Das ist für mich in Ordnung.


Das funktioniert auch bei mir, aber unter "account2@domain2.com" erhalte ich eine Kopie der Nachricht ... eine Idee?
Pioz

3

Diese Frage ist ziemlich alt, aber ich bin gerade auf dieselbe Situation mit derselben Umgebung gestoßen (postfix; dovecot; mysql) und habe den folgenden Ansatz realisiert:

Ich habe eine neue Datenbank-Tabelle erstellt, in der meine virtuellen Vorwärtskonfigurationen gespeichert sind:

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;

Ich habe dann eine neue virtuelle Weiterleitungszuordnungsdatei erstellt, /etc/postfix/mysql-virtual-forward-maps.cfdie die zuvor erstellte virtual_forwardsTabelle abfragt UND immer die verkettete Quell- und Zieladresse zurückgibt (E-Mail wird an Alias ​​UND Ziel gesendet):

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

Und schließlich habe ich die neue Map - Datei zu meiner /etc/postfix/main.cfals virtual_alias_maps:

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

Starten Sie Ihren Postfix-Server neu und alles sollte wie erwartet funktionieren. Ich bevorzuge diesen Ansatz gegen das Hinzufügen einer durch Kommas getrennten Liste zur virtual_aliasesTabelle, da es sich für mich einfach falsch anfühlt. Aber das könnte mein persönliches Problem sein :)

Ich bin mir der Tatsache bewusst, dass ich nicht mehrere Weiterleitungen basierend auf derselben Quelladresse hinzufügen kann (z. B. test @ tworabbits => test1 @ tworabbits, test2 @ tworabbits), aber man könnte die virtual_forwardsTabelle leicht in virtual_forward_sourcesAND aufteilen, virtual_forward_destinationsum dies zu erfüllen Anforderung.

Ich hoffe das hilft jemandem, wenn weitere fünf Jahre vergangen sind :) Prost!


2

Es ist wahrscheinlich koscher, von postfix 'main.cf zu versenden:

Sagen Sie in 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

und in den relevanten Dateien (Empfänger-bcc und Absender-bcc) zum Beispiel:

@sender.domain a.local@address

Vergessen Sie nicht, die Datenbanken nach dem Bearbeiten der Dateien (neu) zu erstellen:

postmap hash:recipient-bcc
postmap hash:sender-bcc

1
Im Moment verwende ich MySQL. Idealerweise müsste ich also etwas in der Datenbank erstellen - irgendwelche Ideen, wie das geht?
FilmJ

0

Die obigen Antworten sind veraltet, die Lösung ist tatsächlich viel einfacher. Sie müssen auf die Schaltfläche "ALIAS" klicken, die E-Mail-Adresse eingeben, an die E-Mails weitergeleitet werden sollen, und auf "An die lokale Mailbox senden" klicken. um es anzukreuzen. Wenn dort ein Häkchen angezeigt wird, werden E-Mails auch lokal zugestellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.