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!

FilmJ
quelle

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.

FilmJ
quelle
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:

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

Diese Syntax leitet alle E-Mails an [email protected] an [email protected] weiter UND prüft, ob Sie den Benutzer [email protected] 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)

[email protected] [email protected] [email protected] 
VorschlaghammerPL
quelle
3
es kann in einer Reihe sein: [email protected] [email protected] [email protected]
Tim Haegele
Ihre Lösung funktioniert für mich, aber unter der Adresse "[email protected]" erhalte ich eine Kopie der Nachricht ... eine Idee?
Pioz
Es hat funktioniert von [email protected] [email protected],[email protected]. Vielen Dank :)
tbutcaru
3

Haben Sie lokale Konten für alle Benutzer?

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

[email protected], \user

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

djhowell
quelle
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 [email protected] [email protected] [email protected] 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, '[email protected]', '[email protected],[email protected]');

Das ist für mich in Ordnung.

dbdemon
quelle
Das funktioniert auch bei mir, aber unter "[email protected]" 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!

zwei Hasen
quelle
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

quelle
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.

Betalord
quelle