防止通过 bash 重复发送电子邮件来过度引用用户

防止通过 bash 重复发送电子邮件来过度引用用户

我需要一些帮助来改进想法/实现。场景是本地小型 ISP。用户帐户存储在 freeradius/mysql 中。任务是发送已消耗 80% 分配配额的用户电子邮件。

我已经配置了 bash 脚本,计划每 1 小时运行一次,检查 mysql 表中已下载的用户75%分配给他们的配额,然后将用户名和电子邮件添加到文件中/tmp/overquotauser.txt像这样

user1 [email protected]
user2 [email protected]
user3 [email protected]

当用户帐户更新时,他的名字将从帐户中删除/tmp/overquotauser.txt

现在我想要的是向这些用户发送电子邮件,这很简单,但我想要的是防止每小时向用户重复发送电子邮件。例如,如果用户已消耗 80%,则只应向用户发送一封电子邮件,而不是每小时。知道如何做到这一点吗?

答案1

您可以使用以下两种方法中的任何一种。

I)每隔一小时创建一个文件/tmp/overquotausernew.txt并将此文件与旧文件进行比较/tmp/overquotausernew.txt。如果在新创建的文件中发现任何新用户,则仅向这些用户发送电子邮件并将新创建的文件与/tmp/overquotauser.txt

这样,您将仅维护一个文件,其中包含电子邮件发送到的所有用户名。脚本将检查未向其发送邮件的任何新用户。

II) 您可以创建一个脚本来发送邮件,以便它检查邮件是否来自/tmp/overquotauser.txt过去 24 小时内是否发送。如果邮件是在过去 24 小时内发送的,则脚本不会执行任何其他操作,它将向该用户发送邮件。

答案2

您可以为此使用 mysql 表,因为您已经在 mysql 中工作了!像这样的表就足够了 -

create table (
    userid varchar(100),
    useremail varchar(100),
    int mailsent default 0
);

您的创建者作业将从此表中创建(或删除)行。您的邮件程序将提取所有mailsent设置为 0 的行,发送邮件并设置mailsent为 1。

但是,如果您真的,真的,真的想要使用文本文件 - 这是一种方法 -

  1. 假设您的创建者 cron 作业的第一次调用创建了一个如下文件 -

    user1,[email protected]
    user2,[email protected]
    user3,[email protected]
    
  2. 现在,在您的邮件程序任务运行的某个时间,它将从此文件中选择具有 emailid 的行,向收件人发送邮件并删除这些行中的电子邮件 ID。 (您可以为此使用 perl 或 sed - 请注意创建者同步写入该文件)在此操作之后您的文件将变成

    user1
    user2
    user3
    
  3. 过了一会儿,您的创建者又添加了两个用户 user4 和 user5。你的文件现在变成

    user1
    user2
    user3
    user4,[email protected]
    user5,[email protected]
    
  4. 当邮件程序任务再次运行时,它只会向步骤 2 中电子邮件 ID 指定为 0 的人员发送电子邮件。

此模式有多种工作方式。

答案3

一种方法是使用 *nix 系统的内置quota工具......从这里

如果Soft Limit800MB并且Hard Limit1000MB,那么当达到时用户将收到电子邮件Soft Limit,允许用户仍然创建文件直到Hard Limit达到。

:)

相关内容