如何将垃圾邮件移至垃圾邮件文件夹? [关闭]
Posted
技术标签:
【中文标题】如何将垃圾邮件移至垃圾邮件文件夹? [关闭]【英文标题】:How to move spam to spam folder? [closed] 【发布时间】:2014-08-07 00:07:29 【问题描述】:我已经在我的 centos 5.10 上安装了 postfix、dovecot、Clamav、Spamassassin 和 amavisd-new。 教程在这里:http://catatanlepas.com/komputer/aplikasi/server-mail/postfix/359-instalasi-postfix-menggunakan-dovecot-di-centos-5-5
我只是没有在该教程中安装 Razor、Pyzor、dan DCC。
在 /var/log/maillog 中一切正常,如果有垃圾邮件没有进入收件箱,但我想将垃圾邮件移动到垃圾邮件文件夹。
我的问题是: 1. 如何在我的网络邮件上自动创建垃圾邮件文件夹,因为它只是创建收件箱、草稿和已发送邮件,我的网络邮件上没有垃圾邮件文件夹。 2. 如何将垃圾邮件移动到每个用户的垃圾邮件文件夹(我在 /var/vmail 上创建用户)
请帮帮我,我在谷歌搜索了 5 天,我对此很感兴趣:(
谢谢。
【问题讨论】:
【参考方案1】:I - 将您的电子邮件发送设置为使用 Dovecot LDA:
OP 链接的原始网站处于离线状态,但我相信电子邮件传递是通过sendmail
程序进行的,它应该通过 Dovecot LDA 完成,以满足您的需要。 (为了避免电子邮件来源标题更改)。
编辑 Postfix 的master.cf
(开头):
smtp inet n - - - - smtpd -o content_filter=spamassassin
在文件末尾:
spamassassin unix - n n - - pipe
flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e
/usr/lib/dovecot/deliver -f $sender -d $user@$nexthop
现在编辑 Postfix 的 main.cf
并添加(可选,检查下面的 (3)):
spamassassin_destination_recipient_limit = 1
现在您的电子邮件将通过 Dovecot LDA 发送,无需更改标题。对于好奇的人,这里有一些关于我的配置的细节:
-
此配置可与加号地址/子地址/收件人分隔符一起使用(发往
user+nospam@example.com
的电子邮件将被发送到user@example.com
收件箱) - 这就是我添加-d $user@$nexthop
的原因这将删除+
以及该域之前的所有内容。要启用此功能,还请务必将recipient_delimiter = +
添加到main.cf
;
我的flagsflags=DROhu
,没有添加任何异常但是可以在这里理解:http://www.postfix.org/pipe.8.html;
spamassassin_destination_recipient_limit = 1
需要确保每个收件人都被 spamassassin 单独处理。由于上面的D
标志(包括X-Original-To
标头),这是必需的。如果您不关心此标头,则可以删除该标志,这不是必需的。
II - 将您的垃圾邮件移至Junk
文件夹:
(在@Electronic Technologies https://***.com/a/32470349/560745 的帮助下)
您还可以将 Dovecot 配置为将检测为垃圾邮件的电子邮件移动到 Junk
IMAP 文件夹。请按照以下说明操作:
编辑/etc/dovecot/conf.d/15-mailboxes.conf
并取消注释/添加Junk
文件夹(应该在mailbox Trash
附近的namespace inbox
部分):
mailbox Junk
special_use = \Junk
用apt-get install dovecot-sieve
安装dovecot-sieve
;
编辑/etc/dovecot/conf.d/90-sieve.conf
并评论该行:#sieve = ~/.dovecot.sieve
将/etc/dovecot/conf.d/90-plugin.conf
编辑为:
plugin
sieve = /etc/dovecot/sieve/default.sieve
编辑 /etc/dovecot/conf.d/15-lda.conf
和 /etc/dovecot/conf.d/20-lmtp.conf
以匹配:
protocol lda/lmtp # do not copy/paste this line!
mail_plugins = $mail_plugins sieve
警告:protocol
选项下可能还有其他设置,请保留它们。文件中protocol lda/lmtp
行发生变化,保持原样。
创建文件夹/etc/dovecot/sieve/
使用此内容创建文件/etc/dovecot/sieve/default.sieve
:
require "fileinto";
if header :contains "X-Spam-Flag" "YES"
fileinto "Junk";
将文件夹权限更改为您的虚拟电子邮件用户和组,例如:chown vmail:vmail /etc/dovecot/sieve/ -R
。如果你错过了这个鸽舍会抱怨!
重启一切:service postfix restart; service dovecot restart; service spamassassin restart
尝试向服务器上的某个电子邮件(从外部服务器)发送电子邮件,首先是普通电子邮件,然后是另一个具有以下主题的电子邮件:XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
。第二封电子邮件应发送至Junk
文件夹,第一封电子邮件应发送至您的收件箱。
如果这在您第一次尝试时不起作用,请查看日志:tail -f /var/log/mail.log
并在 tail
运行时发送电子邮件。一个好的工作设置应该报告stored mail into mailbox 'INBOX'
或stored mail into mailbox 'Junk'
。
【讨论】:
这对我有用,除了-e /usr/lib/dovecot/deliver -f $sender -d $user@$nexthop
部分。它以“(未知用户)”反弹。我确实尝试过使用-a $recipient
而不是-d $user@$nexthop
,但它实际上只是在以太中丢失了(它说它已经发送,但没有收到任何东西)。所以我最终改用-e /usr/sbin/sendmail -oi -f $sender $recipient
,它很有魅力:D
@Stretch 显然您的鸽舍配置与我的不同。您的解决方案可以工作,但是您将无法将电子邮件移动到 Junk
文件夹。通过 postfix 传递会在您的电子邮件中添加您不喜欢的额外标题。您的Unknown User
错误指向一个鸽舍,它在知道您拥有哪些电子邮件帐户时遇到了问题。您在使用虚拟帐户吗?身份验证如何控制? mysql?后缀套接字?
它确实将它发送到垃圾文件夹...通过您的设置,邮件采用 Postfix -> Spamassassin -> Dovecot LDA -> Dovecot ... 我的去向 Postfix -> Spamassassin - > Sendmail -> Dovecot(所以 Dovecot Sieve 仍然适用)。是的,我在 MySQL 中使用虚拟帐户。
我用这个编辑了master.cf
:user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f $sender $recipient
当然,我的 spamassassin 用户是 spamd...所有其他解决方案都不适用于我的情况。但它仍然不会将电子邮件移动到垃圾文件夹。我正在使用亚马逊 SES。
一些dovecot
设置在其dovecot.conf
中没有include conf.d/*.conf
。我花了几个小时才意识到这一点。而且我并不孤单serverfault.com/a/778462/122228【参考方案2】:
适用于 Dovecot 2.1+ 修改/etc/dovecot/dovecot.conf:
namespace
type = private
separator = .
inbox = yes
mailbox Trash
auto = subscribe # autocreate and autosubscribe
special_use = \Trash
mailbox Drafts
auto = subscribe
special_use = \Drafts
mailbox Sent
auto = subscribe
special_use = \Sent
mailbox Junk
auto = subscribe
special_use = \Junk
plugin
sieve = /home/spam/default.sieve
protocol lda
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = $mail_plugins sieve
然后 /etc/postfix/master.cf - 添加
spamassassin unix - n n - - pipe
user=vmail argv=/usr/bin/spamc -f -e /usr/libexec/dovecot/deliver -f $sender -d $recipient
(!!) user=vmail - 将用户更改为为 spamassassin 设置的用户
并将内容过滤器添加到 smtp
smtp inet n - - - - smtpd -o content_filter=spamassassin
在 /etc/mail/spamassassin/local.cf 中
add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ version=_VERSION_
#rewrite_header Subject *****SPAM*****
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
我将在邮件中添加 X-Spam 标头,用于以后的筛子过滤 重启 spamassassin,重新加载 dovecot 和 postfix
垃圾文件夹将自动创建。 所有垃圾邮件将在本地投递到邮箱 Junk 我还添加了一个筛子过滤器的示例,以将所有标记为垃圾邮件的邮件(上面的 spamassassin 配置)移动到垃圾文件夹。
require "fileinto";
if exists "X-Spam-Flag"
if header :contains "X-Spam-Flag" "NO"
else
fileinto "Junk";
stop;
【讨论】:
我试过了,现在所有邮件都进入垃圾文件夹了...为什么? @TCB13 你解决了这个问题吗? 我已经更新了我的帖子。这是 postfix-dovecot-spamassassin 的工作配置 请注意以下部分:spamassassin unix -n n --pipe @pregmatch 在下面查看我的答案。【参考方案3】:嗯,有几种方法,但这是我发现的工作。在你安装好 postfix、dovecot、spamassassin 和(我推荐 procmail)之后,你可以告诉 procmail/spamassassin 如何将垃圾邮件分发到不同的文件夹中。带鸽舍。我使用以下 4 个文件夹:
spam (for known spam based on Bayes setting)
spam-learn (for spam that slipped through, you move it here)
spam-probably (for spam ID'd as probably spam by Bayes setting)
spam-unlearn (messages flagged as spam, that are NOT spam go here)
将文件夹设置和后缀配置为通过 procmail 过滤邮件:
mailbox_command = /usr/bin/procmail -a "$EXTENSION"
您现在可以设置您的 procmailrc 以将垃圾邮件放在收件箱中的正确位置。你的 ~/.procmailrc 应该是这样的:
PATH=/usr/bin/vendor_perl:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Mail/
LOGDIR=$HOME/log
#DEFAULT=$HOME/Mail/
LOGFILE=$LOGDIR/procmail.log
VERBOSE=ON
## with spamc
:0fw: spamc.lock
* < 256000
| spamc
#| /usr/bin/vendor_perl/spamc
# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam
#Mail/spam
# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
spam-probably
#Mail/spam-probably
# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped. This will re-add it.
:0
* ^^rom[ ]
LOG="*** Dropped F off From_ header! Fixing up. "
:0 fhw
| sed -e '1s/^/F/'
现在,让这一切自动运行的最后一个关键是使用fetchmail
扫描到达您收件箱的邮件,然后转交给 procmail,以便将垃圾邮件/垃圾邮件可能放在正确的文件夹中,并阅读邮件中的邮件spam(删除)和 spam-unlearn(学习为ham
)。一个典型的 fetchmail 脚本是你的 ~/.fetchmailrc。它只包含轮询邮箱的命令:
poll mail.yourserver.com protocol IMAP : user yourname with password yourpass ssl \
sslfingerprint "D9:73:1A:FE:C6:7C:E7:9B:F1:31:F8:A1:A0:E1:F9:27"
(您可以通过对您的 .fetchmailrc 文件简单地运行 fetchmail --verbose
来获取您的服务器指纹,它会打印服务器指纹,检查您当前的指纹,告诉您它们不匹配并关闭连接 - 但是 -你下次得到正确的指纹:-)
最后,通过读取 spam-learn 和 spam-unlearn 文件夹来设置几个 cron 作业来运行整个过程。每小时就够了。脚本可能如下所示:
#!/bin/bash
## log file location and per-user name
LDIR=/home/admin/log
LFN="$LDIR/$USER.log"
## Retrieve and Process Spam & Ham from 'spam-learn' & 'spam-unlearn' folders
/usr/bin/fetchmail -a -s -n --folder spam-learn -m '/usr/bin/vendor_perl/sa-learn --spam' &>/dev/null
mss=$?
sleep 2
/usr/bin/fetchmail -a -s -n --folder spam-unlearn -m '/usr/bin/vendor_perl/sa-learn --ham' &>/dev/null
mhs=$?
## test and create log dir in noexist
[[ -d "$LDIR" ]] || mkdir -p "$LDIR"
if [[ -w "$LDIR" ]]; then
## check return from fetchmail and write log info
if [[ $(($mhs+$mss)) -le 2 ]]; then
echo "$(date +'%b %e %R:%S') $HOSTNAME $0##*/: sa-learn completed successfully for user $USER" >>$LFN
else
echo "$(date +'%b %e %R:%S') $HOSTNAME $0##*/: sa-learn FAILED for user $USER" >>$LFN
fi
fi
而 cron 作业只需执行上面的 spamv.sh 文件:
05 * * * * /usr/local/bin/spamv.sh
我已经运行这样的服务器近十年了,它运行良好。培训文件位于用户的主目录中,可以轻松地逐个移动,为新用户提供良好的基础集。祝你好运。几年前,我为openSuSE 11.0 做了一个简短的操作说明。那里可能还有更多信息。
附: Rayzor 值得加载。
【讨论】:
感谢大卫先生的回复。当我想安装 procmail 时,在我的 centos 5.10 中已经安装了 procmail。我该怎么办 ?我搜索 /etc/procmailrc 但在 /etc/ 上什么也没找到,没有 procmailrc。我也没有在我的虚拟用户目录中找到任何关于 procmail 的内容,/var/vmail/(domain)/(username)/Maildir/ 我很困惑搜索它。我应该先卸载 procmail 还是应该怎么做?谢谢你:) 默认没有/etc/procmailrc
,但是如果你创建一个,Procmail 会使用它。
procmailrc 文件是 ~/.procmailrc -- 很抱歉造成混乱以上是关于如何将垃圾邮件移至垃圾邮件文件夹? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Python 3:通过 uid (imaplib) 将电子邮件移至垃圾箱