AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 709327
Accepted
RommelTJ
RommelTJ
Asked: 2022-07-11 12:39:17 +0800 CST2022-07-11 12:39:17 +0800 CST 2022-07-11 12:39:17 +0800 CST

如何在不给自己发送电子邮件的情况下测试 procmail 规则?

  • 772

我收到很多来自某个国家/地区的垃圾邮件。它们在源代码中都有相同的模式。我想编写一个 procmail 规则来自动将所有这些电子邮件移动到我的垃圾邮件文件夹。

垃圾邮件的来源可能如下所示(我添加了“[已编辑]”以保护我的隐私):

Return-Path: <>
X-Original-To: [REDACTED]
Delivered-To: [REDACTED]
Received: from [REDACTED] ([REDACTED] [REDACTED])
    by [REDACTED] (Postfix) with ESMTPS id 2AC8E731E799DC
    for <[REDACTED]>; Sat,  9 Jul 2022 20:16:41 +0000 (UTC)
Received: from [REDACTED].org ([REDACTED].ru [REDACTED])
    by [REDACTED] (Postfix) with ESMTP id 6F1865ECD8
    for <[REDACTED]>; Sat,  9 Jul 2022 20:16:40 +0000 (UTC)
[...]

我想做的是查看“已接收”标题并将来自 .ru TLD 的所有内容都扔进垃圾邮件中。

我的尝试是这样的:

:0 H
* ^Received:*\.ru
.Spam/

但是,我是编写 procmail 规则的新手。我怎样才能测试我的新规则以便我知道它是正确的?

procmail
  • 2 2 个回答
  • 743 Views

2 个回答

  • Voted
  1. Best Answer
    thrig
    2022-07-11T13:23:48+08:002022-07-11T13:23:48+08:00

    procmail接受来自标准输入的邮件消息,因此将对您通过管道发送给它的任何内容采取行动。理想情况下,您通过管道传输的内容应该与邮件传输代理将发送的内容相同。还要在正确包含新规则之前测试使用自定义规则文件.procmailrc:

    # rm output
    # cat testmessage
    From [email protected]
    To: [email protected]
    Subject: foo
    
    test
    # cat testrules
    :0 H
    * ^
    output
    # procmail testrules < testmessage
    # cat output
    From [email protected]
    To: [email protected]
    Subject: foo
    
    test
    
    #
    
    • 7
  2. tripleee
    2022-07-11T20:57:49+08:002022-07-11T20:57:49+08:00

    Procmail 有一个-m选项可让您测试规则文件,而无需在任何地方发送消息;$DEFAULT如果您的规则都不匹配,它会关闭发送到您的收件箱。该选项要求您传入要运行的规则文件的文件名,并允许您像VERBOSE=yes在命令行上一样设置变量。

    procmail -m test.rc VERBOSE=yes <test.msg
    

    也许还可以查看https://www.iki.fi/era/mail/procmail-debug.html (旧但仍然模糊相关)。

    对于您的具体规则,它很容易出现误报。请记住,正则表达式引擎将接受任何部分匹配;所以你的规则将触发例如

    Received: from postfix.rules.example.com ...
    

    因为它匹配 substring .ru。您可以通过在 之后要求一个单词边界来防止这种情况ru:

    :0
    * ^Received:.*\.ru\>
    .Spam/
    

    .*还要注意“任何文本”的正则表达式是如何.匹配任何一个字符的,并*表示尽可能多地重复前一个表达式,但也接受零重复。(因此,您的尝试将允许零个或多个冒号,Received但前提是紧随其后的是文字文本.ru。)

    您可能可以进一步加强这一点,但是Received:标头的标准化程度出了名的差。许多服务器运行 Postfix 或 Sendmail,它们都创建Received:标头,其中冒号后的第一部分指示fromHELONAME (RDNS [IP]),其中 IP 是实际 IP 地址,RDNS 是反向 DNS 查找的结果(可能为空),HELONAME 是为远程客户端命名,当它使用HELOorEHLO命令启动 SMTP 事务时(客户端可以在这里放任何他们想要的东西;有些放明显的伪造品,这是很好的垃圾邮件过滤器!)......而且,许多其他服务器也在运行使用不同格式的不同软件,或鼓励本地管理员配置自己的格式(呃,Exim)。这Received:每条消息顶部附近的标题来自您最本地的服务器,因此比更远的服务器更可预测和可靠,后者很容易包含完全虚构的信息。

    无论如何,这最终有点不令人满意。如果您可以说服您的 ISP 在 SMTP 传输期间阻止这些不需要的消息(有效地终止传递尝试,就好像您的邮箱不可用一样),那么效率会高得多。一些提供商向他们的用户提供访问例如 SpamAssassin 的权限,它可以让您阻止俄语中的消息(尽管精度不是很出色;该机制不太擅长区分例如俄语和塞尔维亚语,因此您需要阻止或允许实际上是所有西里尔语言),有些会阻止 IP 级别的流量,因此已知的垃圾邮件发送者甚至无法连接。但作为对抗破坏者的最后一道防线,Procmail 显然总比没有好。

    • 4

相关问题

  • 如何设置基于 FROM 的简单转发 procmail 规则?

  • Procmail:将票号发送到名为“ticket@domain”的地址?

  • procmail 在文件名中保存带有接收日期的附件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve