
Explicação
Tenho usado um canal da seguinte maneira para canalizar mensagens recebidas para meu aplicativo laravel, mas primeiro verifique se há spam. O seguinte está sendo usado como um transporte virtual
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}
Mas, na verdade, o spamc deve ser executado com o usuário spamd, mas se eu fizer isso, o apache não poderá armazenar o arquivo de e-mail conforme necessário, pois esses arquivos são de propriedade do apache e o laravel tentará chown os arquivos recém-adicionados.
O que estou perguntando
Deve haver uma maneira melhor de redirecionar o e-mail primeiro para spamassassin como usuário spamd e depois enviar a saída para php como apache. Ou isso simplesmente não é possível? Alguma maneira melhor de fazer isso?
Obrigado.
Responder1
Encontrei sucesso usando um canal separado para smtp, como
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}
Isso significa que apenas as mensagens recebidas de fora são enviadas para o spamc e, em seguida, o spamc as envia de volta ao postfix para serem transportadas como deveriam.
No começo fiquei confuso e não tentei fazer isso porque pensei que acabaria sendo um loop interminável de envio de e-mail para si mesmo