На самом деле все довольно просто: я хочу передавать все входящие письма в PHP-скрипт, но только как копии, исходное письмо по-прежнему будет доставляться в почтовый ящик, как обычно.
Я просто не могу заставить это работать. Я пробовал следующее
(1)Создал универсальный псевдоним (mysql):
@mydomain.tld [email protected]
(2)Создал сопоставление regex-transport в /etc/postfix/mailpipe.cf (что по сути означает: применить ко всем письмам mydomain.tld)
/.*@mydomain\.tld/ mailpipe:
(3)интегрировал все это в /etc/postfix/main.cf:
transport_maps = ... regexp:/etc/postfix/mailpipe.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/....
(4)Добавил транспорт в /etc/postfix/master.cf:
mailpipe unix - n n - - pipe
flags=FR user=localuser argv=/path/to/my/script.php
${nexthop} ${user}
Сценарий:
#!/usr/bin/php -q
<?php
$file = '/home/localuser/pipe/log.log';
$input = file_get_contents('php://input');
file_put_contents($file, $input, FILE_APPEND | LOCK_EX);
Итак, настройка, похоже, работает, скрипт срабатывает на входящих письмах, но $input
пуст (работает с любой другой строкой). Письмо обрабатывается, а затем удаляется/отбрасывается.Итак, вот мои два вопроса:
Как я могу получить доступ к содержимому письма из скрипта?
Как предотвратить удаление письма после обработки? Есть ли способ передать одну копию в папку «Входящие», как обычно, а другую — в скрипт для обработки?
решение1
Это можно сделать, используя receive_bcc_maps для отправки скрытых копий всех писем на локальный адрес, настроенный для маршрутизации на ваш скрипт.
Добавьте следующую строку в /etc/postfix/recipient_bcc. Запустите "postmap /etc/postfix/recipient_bcc" после завершения редактирования. Это сообщит Postfix о необходимости отправлять BCC всех писем, где домен соответствует "@yourdomain.tld" на адрес "robotscript@localhost".
@yourdomain.tld robotscript@localhost
Добавьте следующую строку в /etc/postfix/transport. Запустите "postmap /etc/postfix/transport" после завершения редактирования. Это сообщит Postfix, что письма, предназначенные для адреса "robotscript@localhost", должны доставляться непосредственно на этот сервер, а не ретранслироваться куда-либо еще.
robotscript@localhost :
Добавьте следующие строки в /etc/postfix/main.cf, чтобы Postfix использовал введенные выше конфигурации.
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
transport_maps = hash:/etc/postfix/transport
Убедитесь, что параметр «mydestination» в /etc/postfix/main.cf включает значение «localhost».
Добавьте следующую строку в /etc/aliases. Запустите "postalias /etc/aliases" после завершения редактирования. Это то, что фактически передает письма, предназначенные для "robotscript@localhost", в ваш PHP-скрипт. Ваш скрипт должен быть настроен на чтение содержимого письма из STDIN.
robotscript: "|/path/to/your/php_script.php"
Перезапустите Postfix, и все ваши письма будут скопированы в ваш скрипт, а также доставлены на исходный адрес получателя.