Как переслать почту при сохранении копии с использованием postfix и mysql?

Я перевожу электронную почту со старых установок Plesk на пользовательский сервер Ubuntu, на котором работает iRedMail (postfix/amavisd/dovecot/etc).

Я использую postfixadmin для администрирования всех доменов и бэкэнда mysql. Я заметил, что если я хочу что-то "псевдоним" или создать пересылку, я не могу использовать существующий почтовый ящик - поэтому я не могу скопировать в Plesk-стиле "перенаправление с сохраненной копией".

В настоящее время я устанавливаю удаленные псевдонимы через базу данных и использую:

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

Если есть способ по-прежнему использовать мою базу данных, это было бы идеально, даже если мне нужно добавить несколько столбцов и изменить запрос.

Спасибо!

6 ответов

Решение

Я понял это. По сути, мне нужно изменить таблицу mysql, которая сохраняет псевдонимы, чтобы она поддерживала несколько псевдонимов для каждого адреса, позволяя настроить доставку как для локального домена, так и для удаленной электронной почты.

Пока это работает, хотя я слышал, что некоторые люди, пытающиеся это сделать, получили дубликаты электронных писем на переадресованную учетную запись электронной почты. До сих пор я не испытывал этого.

Я использовал postfixadmin для управления учетными записями, но он не поддерживает это использование, поэтому мне пришлось изменить исходный код, чтобы он правильно отображал, редактировал и удалял псевдонимы.

Основной урок здесь заключается в том, что при использовании mysql один ключ может быть сопоставлен с несколькими результатами, путем установки нового первичного ключа, то есть "id", но с сохранением логики запроса постфикса. Несколько возвращенных результатов совпадают с несколькими результатами в файлах dbm / bd по умолчанию, за исключением того, что необходимо создать новую запись с тем же ключом, а не одним ключом с каким-либо результатом с разделителями.

HTH другие!

Это должно работать с любыми картами в MySQL.

Если у вас есть виртуальная учетная запись, определенная в virtual_mailbox_maps, и вы хотите перенаправить и сохранить сообщение, вы должны вставить 2 псевдонима в карту псевдонимов:

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

И этот синтаксис перенаправит любую почту на account@example.com на redirect@anotherdomain.com И проверит, есть ли у вас учетная запись user@example.com в virtual_mailbox_maps, и если да, то сохраните ее.

Обновление Или вы можете даже использовать ( Tim Haegele спасибо за комментарий)

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

У вас есть локальные учетные записи для всех пользователей?

Я использовал файл.forward с чем-то вроде:

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

которая пересылает копию и хранит копию в локальной папке.

Очень простое решение - включить адрес источника в список через запятую в столбце назначения. Например:

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

Это подходит для меня.

Этот вопрос довольно старый, но я просто столкнулся с той же ситуацией, имеющей ту же среду (postfix; dovecot; mysql), и реализовал следующий подход:

Я создал новую таблицу БД, в которой хранятся мои виртуальные прямые конфигурации:

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 всегда возвращает объединенный источник, а также адрес назначения (почта будет отправлена ​​на псевдоним 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.cf как virtual_alias_maps:

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

Перезапустите свой постфиксный сервер, и все должно работать как положено. Я поддерживаю этот подход против добавления списка через запятую virtual_aliases стол, так как это просто неправильно для меня. Но это может быть моей личной проблемой:)

Мне известно, что я не могу добавить несколько форвардов на основе одного и того же адреса источника (например, test@tworabbits => test1@tworabbits, test2@tworabbits), но можно легко разделить virtual_forwards стол в virtual_forward_sources А ТАКЖЕ virtual_forward_destinations чтобы удовлетворить это требование.

Я надеюсь, что это поможет кому-то, когда прошло еще пять лет:) Ура!

Это, вероятно, более кошерный для отправки из 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

и в соответствующих файлах (получатель-скрытая копия и отправитель-скрытая копия), например:

@sender.domain a.local@address

Не забудьте перестроить базы данных после редактирования файлов:

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

Ответы выше устарели, решение на самом деле намного проще. Вам нужно нажать кнопку "АЛИАС", вставить адрес электронной почты, на который вы хотите пересылать электронные письма, и нажать "Доставить в локальный почтовый ящик". чтобы поставить галочку. Если там стоит галочка, электронные письма также будут доставляться локально.

Другие вопросы по тегам