지난 24 시간에 전자 메일을 전송 된 전자 메일 주소를 무시 전자 메일 주소는 텍스트 파일에 날짜 및 시간과 함께 저장되고 24 시간 이내에 전자 메일 주소가 하나 이상의 전자 메일을받지 않도록 검사가 수행됩니까?BASH 내가 BASH 스크립트 아래처럼이
답변
한 가지 방법은받는 사람 당 파일을 만들고 파일의 타임 스탬프를 사용하는 것입니다.
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
편집 : 이메일 주소의 내가 추가 한 해싱. 그것은 내가 어쨌든 할 계획이었던 것이었지만, Aleks-Daniel's code for that은 너무 좋고 간결해서 여기서 빌렸다. sha256sum에서 md5sum으로 바뀌었다. MD5는 더 빠르며 잠재적 인 문제가 있지만 여기서는 문제가 될 것이라고 생각하지 않습니다. 물론 선택할 수는 있습니다. 또한 Hashing은 find의 파일 이름 일치를 뒤엎는 특수 문자의 문제를 피합니다. 파일에
나는이 제안 된 코드를 사용하여 테스트했지만 전자 메일이나 파일을 보내지 않았다. 전자 메일 주소와 내가 설정 한'$ MAIL_TIMESTAMPS' 디렉토리를 이용한 수동 터치는 괜찮습니다. 이것에 대한 어떤 제안? – user2656114
코드를 업데이트했고, 최신 버전을 사용하고 있는지 확인했습니다. (테스트 해본 결과 나에게 유용합니다) – MattJ
사용하여 타임 스탬프 : 당신은 누군가가 임시 폴더에 이메일 주소를 표시하지 않으려면
또한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
, 당신은 당신의 주소를 충당하기 위해 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
MD5 솔루션의 경우 + 1, [cat's의 쓸데없는 사용] (http : //partmaps.org/era/unix/award.html). – tripleee
- 1. bash 스크립트
- 2. Bash : postgresql 트리거 함수에서 bash 스크립트 호출하기
- 3. 아래의 BASH 코드에서 전체 bash 스크립트 행을
- 4. 변수가있는 bash 스크립트를 작성하는 Bash 스크립트
- 5. xls2csv에 대한 Bash 스크립트
- 6. bash 스크립트 : var = "[| -d]"
- 7. diff를 확인하기위한 Bash 스크립트
- 8. 자체 삭제 bash 스크립트
- 9. 자신을 모니터하는 bash 스크립트
- 10. bash 명령을위한 CGI 스크립트
- 11. pairwise 비교를위한 bash 스크립트
- 12. Bash 스크립트 가속화
- 13. KDE에서 bash 스크립트 실행
- 14. bash 스크립트의 Sed 스크립트
- 15. lftp + bash 스크립트 + 변수
- 16. 테스트를 실행하는 Bash 스크립트
- 17. ImageMagick bash 스크립트 문제
- 18. 스칼라 Bash 테스트 스크립트
- 19. bash 쉘 스크립트 테스트
- 20. Bash 스크립트, if 문
- 21. 비교를위한 bash 스크립트
- 22. Bash 스크립트 종료 쉘
- 23. gradle에서 bash 스크립트 실행
- 24. Bash 스크립트 로깅 사용
- 25. 기본 bash 스크립트 인수
- 26. bash 백업 스크립트 오류
- 27. Bash 스크립트 파일 설명자
- 28. 간단한 Bash 스크립트 루프
- 29. 시차 bash 스크립트
- 30. bash 스크립트 인수 그룹화
임시 파일을 사용할 수 있습니다. 내부에 날짜를 쓰고 확인해주세요. –
@ Aleks-DanielJakimenko 네,이게 정확히 제가 필요로하는 것이지만, 제 코드를 어떻게 사용하는지 예제가 필요합니까? – user2656114
@ user2656114 이메일이 무엇인지 알려 주시면 감사하겠습니다. 내가 정말로 알고있는 것은 아니지만 .. – konsolebox