BASH忽略过去24小时内通过电子邮件发送的电子邮件地址

BASH忽略过去24小时内通过电子邮件发送的电子邮件地址,bash,Bash,我有一个BASH脚本,如下所示: cat limit_mail.out | while read num email limit orders; do echo "Sending mail to '$email'" printf "$email_template" "$email" "$num" "$limit" "$orders" | sendmail -oi -t done 如何使电子邮件发送时,电子邮件地址与日期和时间一起保存在文本文件中,然后进行检查,以确保没有

我有一个BASH脚本,如下所示:

cat limit_mail.out | while read num email limit orders; do
    echo "Sending mail to '$email'"
    printf "$email_template" "$email" "$num" "$limit" "$orders" |
    sendmail -oi -t
done

如何使电子邮件发送时,电子邮件地址与日期和时间一起保存在文本文件中,然后进行检查,以确保没有任何电子邮件地址在24小时内收到超过1封电子邮件?

一种方法是为每个收件人创建一个文件,并使用文件的时间戳

MAIL_TIMESTAMPS=/var/cache/mailstamps
mkdir "$MAIL_TIMESTAMPS"

cat limit_mail.out | while read num email limit orders; do
    echo "Sending mail to '$email'"
    email_hash="$(md5sum <<< "$email" | cut -d' ' -f1)";
    # Check that a timestamp file doesn't exist, or that it was modified over 24h ago
    if ! test -n "$(find "$MAIL_TIMESTAMPS" -mtime -1 -name "$email_hash")"; then
      touch "$MAIL_TIMESTAMPS/$email_hash" # Update timestamp
      printf "$email_template" "$email" "$num" "$limit" "$orders" |
      sendmail -oi -t
    fi
done
MAIL\u TIMESTAMPS=/var/cache/mailstamps
mkdir“$MAIL_时间戳”
cat limit_mail.out |同时读取num个电子邮件限制订单;做
回显“将邮件发送到“$email”

email_hash=“$(md5sum一种方法是为每个收件人创建一个文件,并使用文件的时间戳

MAIL_TIMESTAMPS=/var/cache/mailstamps
mkdir "$MAIL_TIMESTAMPS"

cat limit_mail.out | while read num email limit orders; do
    echo "Sending mail to '$email'"
    email_hash="$(md5sum <<< "$email" | cut -d' ' -f1)";
    # Check that a timestamp file doesn't exist, or that it was modified over 24h ago
    if ! test -n "$(find "$MAIL_TIMESTAMPS" -mtime -1 -name "$email_hash")"; then
      touch "$MAIL_TIMESTAMPS/$email_hash" # Update timestamp
      printf "$email_template" "$email" "$num" "$limit" "$orders" |
      sendmail -oi -t
    fi
done
MAIL\u TIMESTAMPS=/var/cache/mailstamps
mkdir“$MAIL_时间戳”
cat limit_mail.out |同时读取num个电子邮件限制订单;执行
回显“将邮件发送到“$email”

email_hash=“$(md5sum在文件中使用时间戳:

DELAY_FOLDER='myTempFolder/'
DELAY=$((24*60*60)) # one day

while read num email limit orders; do
    echo "Sending mail to '$email'"
    if [[ -f $DELAY_FOLDER/$email ]] && (( $(cat "$DELAY_FOLDER/$email") + DELAY > $(date +%s) )); then
        echo "email has been sent already"
    else
        printf "$email_template" "$email" "$num" "$limit" "$orders" | sendmail -oi -t
        echo "$(date +%s)" > "$DELAY_FOLDER/$email"
    fi
done < limit_mail.out
DELAY_FOLDER='myTempFolder/'
延迟=$((24*60*60))#一天
在阅读num电子邮件限制订单时;执行以下操作
回显“将邮件发送到“$email”
如果[[-f$DELAY_FOLDER/$email]]&($(cat“$DELAY_FOLDER/$email”)+DELAY>$(date+%s)),则
回显“电子邮件已发送”
其他的
printf“$email_template”“$email”“$num”“$limit”“$orders”| sendmail-oi-t
回显“$(日期+%s)”>“$DELAY\u文件夹/$email”
fi
完成
此外,如果您不希望任何人看到临时文件夹中的电子邮件地址,您可以使用md5或sha总和覆盖您的地址。如下所示:

DELAY_FOLDER='myTempFolder/'
DELAY=$((24*60*60)) # one day

while read num email limit orders; do
    echo "Sending mail to '$email'"
    emailsha=$(sha256sum <<< "$email" | cut -d' ' -f1)
    if [[ -f $DELAY_FOLDER/$emailsha ]] && (( $(cat "$DELAY_FOLDER/$emailsha") + DELAY > $(date +%s) )); then
        echo "email has been sent already"
    else
        printf "$email_template" "$email" "$num" "$limit" "$orders" | sendmail -oi -t
        echo "$(date +%s)" > "$DELAY_FOLDER/$emailsha"
    fi
done < limit_mail.out
DELAY_FOLDER='myTempFolder/'
延迟=$((24*60*60))#一天
在阅读num电子邮件限制订单时;执行以下操作
回显“将邮件发送到“$email”
emailsha=$(sha256sum“$DELAY\u FOLDER/$emailsha”
fi
完成
在文件中使用时间戳:

DELAY_FOLDER='myTempFolder/'
DELAY=$((24*60*60)) # one day

while read num email limit orders; do
    echo "Sending mail to '$email'"
    if [[ -f $DELAY_FOLDER/$email ]] && (( $(cat "$DELAY_FOLDER/$email") + DELAY > $(date +%s) )); then
        echo "email has been sent already"
    else
        printf "$email_template" "$email" "$num" "$limit" "$orders" | sendmail -oi -t
        echo "$(date +%s)" > "$DELAY_FOLDER/$email"
    fi
done < limit_mail.out
DELAY_FOLDER='myTempFolder/'
延迟=$((24*60*60))#一天
在阅读num电子邮件限制订单时;执行以下操作
回显“将邮件发送到“$email”
如果[[-f$DELAY_FOLDER/$email]]&($(cat“$DELAY_FOLDER/$email”)+DELAY>$(date+%s)),则
回显“电子邮件已发送”
其他的
printf“$email_template”“$email”“$num”“$limit”“$orders”| sendmail-oi-t
回显“$(日期+%s)”>“$DELAY\u文件夹/$email”
fi
完成
此外,如果您不希望任何人看到临时文件夹中的电子邮件地址,您可以使用md5或sha总和覆盖您的地址。如下所示:

DELAY_FOLDER='myTempFolder/'
DELAY=$((24*60*60)) # one day

while read num email limit orders; do
    echo "Sending mail to '$email'"
    emailsha=$(sha256sum <<< "$email" | cut -d' ' -f1)
    if [[ -f $DELAY_FOLDER/$emailsha ]] && (( $(cat "$DELAY_FOLDER/$emailsha") + DELAY > $(date +%s) )); then
        echo "email has been sent already"
    else
        printf "$email_template" "$email" "$num" "$limit" "$orders" | sendmail -oi -t
        echo "$(date +%s)" > "$DELAY_FOLDER/$emailsha"
    fi
done < limit_mail.out
DELAY_FOLDER='myTempFolder/'
延迟=$((24*60*60))#一天
在阅读num电子邮件限制订单时;执行以下操作
回显“将邮件发送到“$email”
emailsha=$(sha256sum“$DELAY\u FOLDER/$emailsha”
fi
完成
您可以使用临时文件。在其中写入日期,然后检查it@Aleks-DanielJakimenko是的,这正是我需要的,但我需要一个使用我的代码的示例,关于如何做到这一点,请?@user2656114介意告诉我们这些电子邮件的用途吗?我真的不想知道。你可以使用临时文件。在里面写一个日期,然后检查it@Aleks-丹尼尔雅基门科是的,这正是我所需要的,但我需要一个使用我的代码的示例,关于如何做,请?@user2656114愿意告诉我们这些电子邮件是用来做什么的吗?我不是真的想知道。我使用这个建议的代码测试了它,但是没有发送电子邮件,也没有创建文件。使用电子邮件地址和
$mail\u TIMESTAMPS
目录进行手动触摸,我已经完成了测试不过,t工作正常。对此有什么建议吗?我更新了代码,检查您使用的是最新版本(我已经测试过了,它对我有效)我使用此建议的代码进行了测试,但是没有发送电子邮件或创建文件。使用电子邮件地址和
$mail\u TIMESTAMPS
目录手动触摸可以正常工作。对此有任何建议吗?我更新了代码,检查您使用的是最新版本(我已经测试过,它对我有效)+MD5溶液为1,切圆方向为避免。MD5溶液为+1,切圆方向为避免。