Как переслать почту при сохранении копии с использованием 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
Ответы выше устарели, решение на самом деле намного проще. Вам нужно нажать кнопку "АЛИАС", вставить адрес электронной почты, на который вы хотите пересылать электронные письма, и нажать "Доставить в локальный почтовый ящик". чтобы поставить галочку. Если там стоит галочка, электронные письма также будут доставляться локально.