我在 CentOS 上运行 Dovecot 邮件服务器和 postfix,它为许多虚拟主机提供服务,现在我花了很多时间搜索,阅读了大量关于如何强制所有传入邮件发送给每个域下的一个邮件用户的更有用的完全垃圾材料,例如:
http-post@* //(any existing allowed host)
作为 HTTP POST 传递到固定 URL 而不是邮箱。但我真的找不到任何信息来说明正确的做法。我已经尝试从相同邮件域的 postfix 端进行处理,但没有成功。现在我正在阅读有关 Dovecot 和 Sieve 的文章,但似乎有很多即将阅读的内容,我不确定我是否走对了方向。为了开发另一端和测试目的,我创建并使用了一个小型 sh 脚本来嗅探邮件并发送 HTTP POST,但现在一切似乎都已准备好投入生产,我却陷入了困境。
我怎样才能以正确的方式实现这一目标?
答案1
所以我仍在寻找正确的方法,但对于那些遇到类似问题的人来说,这是我的工作肮脏方法:)
1. 在 /etc/aliases 中添加别名
#for my coal for all http-post user under any domain
http-post: |/etc/postfix/mailworker.sh
# or you can make it for specific email
[email protected]: |/etc/postfix/mailworker.sh
# or forward it to mail and script
[email protected]: [email protected],|/etc/postfix/mailworker.sh
2. 申请
..]# newaliases
..]# service postfix restart
3.创建文件和tmp文件夹
..]# mkdir /tmp/mailworker
..]# vi /etc/postfix/mailworker.sh
文件内容
#!/bin/bash
cd /tmp/mailworker
read mailfrom
read mailreturnpath
# Could read more headers individually
cat > data-$$
messageFull=`cat data-$$`
messageSafe=$(echo -ne $messageFull | base64);
# Here you do anything you want with email
# As i mentioned for testing I do something very bad here ;) so don't ever do that on any production environment
mysql -h localhost -u myusername -pMyPass1 mydatabase -e "INSERT INTO mytable (id,insdate,mailfrom,mailreturnpath,message) values(NULL,NULL,'$mailfrom','$mailreturnpath','$messageSafe');"
rm -f /tmp/mailworker/data-$$
就是这样!
但我在寻找的是如何以干净、安全的方式做到这一点,因此我对如何处理电子邮件有不同的奇怪想法:)比如清理消息并将其转发到我的内部聊天使用的 Web 套接字等等...
答案2
那么,您是否尝试将某个域下的所有邮件过滤给单个用户,还是仅过滤所有垃圾邮件?
第一个方法是,在 MTA 中使用 catchall 别名。Postfix 允许你通过用户/域/传输将邮件发送到脚本,这可能是一个不错的选择开始..
第二种方法可能最好使用对垃圾邮件进行评分的程序,amavisd-new 有final_spam_destiny
,spamasssasin 可以挂接到 fetchmail 或 .procrc。Sieve 是另一种选择,尽管它在这个过程中相当晚。