解释
我一直使用如下管道将传入邮件传送到我的 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 会尝试 chown 新添加的文件。
我问的是
一定有更好的方法,首先将邮件以 spamd 用户身份重定向到 spamassassin,然后以 apache 身份将输出发送到 php。或者这根本不可能?有没有更好的方法?
谢谢。
答案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 以按应有的方式进行传输。
起初我很困惑,没有尝试这个,因为我认为这最终会导致邮件无限循环发送给自己