kopano-autorespond 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #! /usr/bin/env bash
  2. FROM=$1
  3. TO=$2
  4. SUBJECT=$3
  5. USER=$4
  6. MSG=$5
  7. # defaults
  8. self="${0##*/}"
  9. AUTORESPOND_CC=0
  10. AUTORESPOND_NORECIP=0
  11. TIMELIMIT=$[24*60*60]
  12. BASE_PATH=/var/lib/kopano/autorespond
  13. SENDDB=$BASE_PATH/vacation-$USER.db
  14. SENDDBTMP=$BASE_PATH/vacation-$USER-$$.tmp
  15. SENDMAILCMD=/usr/sbin/sendmail
  16. SENDMAILPARAMS="-t -f"
  17. if [ -r /etc/kopano/autorespond ] ; then
  18. . /etc/kopano/autorespond
  19. fi
  20. if [ ! -d "$BASE_PATH" ] ; then
  21. /usr/bin/logger -p mail.notice -t "$self" "Created directory $BASE_PATH"
  22. mkdir -p "$BASE_PATH"
  23. chmod 750 "$BASE_PATH"
  24. /usr/bin/logger -p mail.notice -t "$self" "Moving existing vacation files from /tmp to $BASE_PATH"
  25. mv -fv /tmp/kopano-vacation-* "$BASE_PATH/"
  26. fi
  27. # Check whether we want to respond to the message
  28. RESPOND=0
  29. if [ "$AUTORESPOND_NORECIP" = "1" ]; then
  30. RESPOND=1
  31. elif [ "$AUTORESPOND_BCC" = 1 -a "$MESSAGE_BCC_ME" = "1" ]; then
  32. RESPOND=1
  33. elif [ "$AUTORESPOND_CC" = "1" -a "$MESSAGE_CC_ME" = "1" ]; then
  34. RESPOND=1
  35. elif [ "$MESSAGE_TO_ME" = "1" ]; then
  36. RESPOND=1
  37. fi
  38. if [ $RESPOND -ne 1 ]; then
  39. exit 0;
  40. fi
  41. # Subject is required
  42. if [ -z "$SUBJECT" ]; then
  43. SUBJECT="Autoreply";
  44. fi
  45. # not enough parameters
  46. if [ -z "$FROM" -o -z "$TO" -o -z "$USER" -o -z "$MSG" ]; then
  47. exit 0;
  48. fi
  49. if [ ! -f "$MSG" ]; then
  50. exit 0;
  51. fi
  52. # Loop prevention tests
  53. if [ "$FROM" = "$TO" ]; then
  54. exit 0;
  55. fi
  56. shortto=`echo "$TO" | sed -e 's/\(.*\)@.*/\1/' | tr '[A-Z]' '[a-z]'`
  57. if [ "$shortto" = "mailer-daemon" -o "$shortto" = "postmaster" -o "$shortto" = "root" ]; then
  58. exit 0;
  59. fi
  60. shortfrom=`echo "$FROM" | sed -e 's/\(.*\)@.*/\1/' | tr '[A-Z]' '[a-z]'`
  61. if [ "$shortfrom" = "mailer-daemon" -o "$shortfrom" = "postmaster" -o "$shortfrom" = "root" ]; then
  62. exit 0;
  63. fi
  64. # Check if mail was send in last $TIMELIMIT timeframe
  65. TIMESTAMP=`date +%s`
  66. if [ -f "$SENDDB" ]; then
  67. while read last to; do
  68. if [ "$TO" != "$to" ]; then
  69. continue
  70. fi
  71. if [ $[$last+$TIMELIMIT] -ge $TIMESTAMP ]; then
  72. exit 0;
  73. fi
  74. done < "$SENDDB"
  75. fi
  76. umask 066
  77. grep -v "$TO" "$SENDDB" > "$SENDDBTMP" 2>/dev/null
  78. mv "$SENDDBTMP" "$SENDDB" 2>/dev/null
  79. echo $TIMESTAMP "$TO" >> "$SENDDB" 2>/dev/null
  80. $SENDMAILCMD $SENDMAILPARAMS "$FROM" < "$MSG"