
Объяснение
Я использовал канал следующим образом для передачи входящей почты в мое приложение Laravel, но сначала проверяю на спам. Следующий используется как виртуальный транспорт
myhook unix - n n - - pipe
flags=F user=apache argv=/usr/bin/spamc -e /usr/bin/php -f /var/www/laravel/artisan mail:incoming ${sender} ${size} ${recipient}
Но на самом деле spamc следует запускать от имени пользователя spamd, но если я это сделаю, то Apache не сможет сохранить почтовый файл так, как требуется, поскольку эти файлы принадлежат Apache, а Laravel попытается изменить недавно добавленные файлы.
Что я спрашиваю
Должен быть лучший способ перенаправить почту сначала в spamassassin как пользователь spamd, а затем отправить вывод в php как apache. Или это просто невозможно? Есть ли лучший способ сделать это?
Спасибо.
решение1
Я добился успеха, используя отдельный канал для smtp, например
smtp inet n - n - - smtpd
-o content_filter=spamassassin
# ...
spamassassin unix - n n - - pipe
user=spamd argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
myhook unix - n n - - pipe
flags=F user=apache argv=/usr/bin/php -f /var/www/laravel/artisan mail:incoming ${sender} ${size} ${recipient}
Это означает, что только входящая почта извне отправляется на spamc, а затем spamc отправляет ее обратно на postfix для дальнейшей транспортировки.
Сначала я был в замешательстве и не пробовал это сделать, потому что думал, что это приведет к бесконечному циклу отправки писем самому себе.