Назад | Перейти на главную страницу

Как передать postfix в контроллер Codeigniter

В настоящее время у меня есть postfix piping в PHP-скрипт для обработки электронной почты через псевдоним.

catchall: |/var/www/vhosts/website/httpdocs/scripts/incoming_mail.php

Однако я хочу использовать конфигурацию БД и т. Д., Предоставленную в моем проекте CI, поэтому мне нужно предоставить такой маршрут, как:

catchall: |/var/www/vhosts/website/httpdocs/cli.php /incoming_mail

Желаемым результатом этого будет запуск контроллера incoming_mail.

Если я попробую сделать это, письмо будет возвращено со следующим:

Action: failed
Status: 5.2.0
Diagnostic-Code: X-Postfix; cannot append message to file /incoming_mail:
cannot create file exclusively: Permission denied

Любая помощь приветствуется!

Привет, вот как я сделал парсер:

/etc/postfix/master.cf (постфикс)

bounce-pipe    unix  -       n       n       -       -       pipe
    flags=BDFORXhqu user=deploy argv=/usr/bin/php5 /var/www/emailmanager/public/index.php

транспорт (постфикс)

mailtoparse@example.com bounce-pipe:

index.php - получить данные, которые вы бы обработали

$data = file_get_contents('php://stdin');

Невозможно добавить сообщение в файл / incoming_mail: невозможно создать файл монопольно: в доступе отказано

Вышеупомянутое сообщение об ошибке выдается постфиксом, потому что вы говорите ему добавить содержимое электронной почты в /incoming_mail , вместо передачи аргумента /incoming_mail к cli.php.

В соответствии с man 5 псевдонимы

| команда

Почта передается в команду. Команды, содержащие специальные символы, такие как пробелы, следует заключать в двойные кавычки. Подробную информацию о доставке команде см. В local (8).

Поскольку вы не переносите команду, содержащую пробелы, постфикс интерпретируется /incoming_mail как имя файла

/имя файла

Почта добавляется в / file / name. См. Local (8) для получения подробной информации о доставке в файл. Доставка не ограничивается обычными файлами. Например, чтобы избавиться от нежелательной почты, перенаправьте ее в / dev / null.

Решение: заключите команду в файл псевдонима в двойные кавычки

catchall: "|/var/www/vhosts/website/httpdocs/cli.php /incoming_mail"

PS: Решение Jommaar использовать transport_maps и pipe тоже можно использовать :)