User Tools

Site Tools


setting_up_the_vacation_1_email_auto-responder_on_sdf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
setting_up_the_vacation_1_email_auto-responder_on_sdf [2021/03/22 06:18] hc9setting_up_the_vacation_1_email_auto-responder_on_sdf [2024/12/27 05:45] (current) – ''’ hc9
Line 1: Line 1:
 +====== Setting up the vacation(1) email auto-responder on SDF: ======
 +
 +==== What: ====
 +
 +The vacation(1) tool allows users to schedule automated email replies, useful for letting people know when you're away for a while.
 +
 +==== Prerequisites: ====
 +
 +  * SDF ARPA membership or higher
 +  * public key authentication (only for Meta Array users)
 +
 +==== How vacation(1) works: ====
 +
 +The tool uses two files – ''$HOME/.vacation.msg'' and ''$HOME/.vacation.db'' by default – to a) issue an auto-reply message, and b) track who and when a sender was replied to. vacation(1) is usually called via a user's ''$HOME/.forward'' file, but as the tool can read from stdin(4) there are other possibilities, ie. in conjunction with procmail(1).
 +
 +=== Basic setup procedure: ===
 +
 +  * initialize the DB file; initialization creates the DB file if it doesn't exist and sets/resets the vacation interval timer – the period it waits to resend an auto-reply. The default interval is one (1) week; to specify an different interval use ‘''-t nu''’, where “n” is an integer and “u” is ''s'', ''m'', ''h'', ''d'', or ''w'' (seconds, minutes, hours, days, weeks; week is default). If “n” = 0 and “u” is omitted, a notice is sent for every message. If “n” is set to a very large number, say 9999, no sender will ever receive more than one notice.
 +  * create the auto-reply message. The message needs to be a routable email file with a header and body section. A ''$SUBJECT'' variable is supported for a more customized response.
 +  * edit the ''$HOME/.forward'' file to pipe mail through vacation(1); it's good idea to test the configuration beforehand using the vacation(1) ‘''-d''’ debug option.
 +
 +==== Some examples: ====
 +
 +=== ex.1) minimal setup using defaults: ===
 +
 +<code>
 +% vacation -I                       # initialize DB; defaults to 30 days
 +
 +% cat > $HOME/.vacation.msg         # create minimal auto-reply message
 +From: sdf_user@sdf.org
 +Subject: Vacation notice
 +Precedence: bulk
 +
 +I will be out of the office until next week.
 +^D
 +
 +% cat > $HOME/test.msg              # create test message for debugging
 +From frog@mud.bog
 +To: sdf_user@sdf.org
 +Subject: Hop on over here
 +
 +Check out my new pad!
 +^D
 +
 +% vacation -d sdf_user < test.msg   # test w/o actually replying
 + =>
 +    To: frog@mud.bog
 +    Auto-Submitted: auto-replied
 +    From: sdf_user@sdf.org
 +    Subject: Vacation notice
 +    Precedence: bulk
 +
 +    I will be out of the office until next week.
 +
 + note: if executed as-is more than once there won't be any output; use
 +       the '-t0' option to override the default 30 day response time.
 +
 +% cat > $HOME/.forward              # retain a copy & pipe to vacation(1)
 +\sdf_user, "|/usr/bin/vacation sdf_user"
 +^D
 +</code>
 +
 +=== ex.2) customized auto-reply sent every 2 days: ===
 +
 +<code>
 +% vacation -I -t 2d                 # initialize DB; set timer to 2 days
 +% cat > $HOME/.vacation.msg         # create custom auto-reply message
 +From: sdf_user@sdf.org
 +Subject: Out of the office
 +Delivered-By: vacation(1) on SDF
 +Precedence: bulk
 +
 +I will be out of the office until next week; please contact
 +George about $SUBJECT if it's urgent.
 +^D
 +
 +% cat > $HOME/test2.msg             # create test message for debugging
 +From frog@mud.bog
 +To: sdf_user@sdf.org
 +Subject: the penski account
 +
 +Can you get this done this week?
 +^D
 +
 +% vacation -d sdf_user < test2.msg  # test w/o actually replying
 + =>
 +    To: frog@mud.bog
 +    Auto-Submitted: auto-replied
 +    From: sdf_user@sdf.org
 +    Subject: Out of the office
 +    Delivered-By: vacation(1) on SDF
 +    Precedence: bulk
 +
 +    I will be out of the office until next week; please contact
 +    George about the penski account if it's urgent.
 +
 +% cat > $HOME/.forward  # retain a copy & pipe to vacation(1)
 +\sdf_user, "|/usr/bin/vacation sdf_user"
 +^D
 +</code>
 +
 +=== ex.3) SDF Meta Array setup: ===
 +
 +SDF users who have their mail sent to the Meta Array (host //ma.sdf.org//) will need to use ssh(1) with public key authentication to the SDF Cluster (host //tty//) as vacation(1) is not available natively on the Meta Array.
 +
 +Basic setup:
 +
 +  - setup vacation(1) on the SDF cluster as previously shown
 +  - setup ssh(1) [[http://sdf.org/?tutorials/SSH-SDF#public_key|public key authentication]] to host //tty//
 +  - on //ma.sdf.org// create a test.msg and test things before committing: <code>
 +  sdf_user@ma: cat test.msg | ssh sdf_user@tty "cat - | vacation -d -t0 sdf_user"
 +   =>
 +      To: frog@mud.bog
 +      Auto-Submitted: auto-replied
 +      From: sdf_user@ma.sdf.org
 +      Subject: Vacation notice
 +      Precedence: bulk
 +      ...
 +</code>
 +  - edit ''$HOME/.forward'' on //ma.sdf.org// like so: <code>
 +  # .forward
 +  \sdf_user, "| ssh sdf_user@tty 'cat - | vacation sdf_user' "
 +</code>
 +
 +=== ex.4) using vacation(1) with procmail(1): ===
 +
 +Users of the procmail(1) program probably won't want to disable it just to make use of vacation(1). The following illustrates how to integrate vacation(1) into a typical user's ''$HOME/.procmailrc'' file; it should be inserted above any "delivery" recipes so all messages are passed through:
 +
 +<code>
 +# ~sdf_user/.procmailrc
 +...
 +## selective vacation(1) auto-responder filter setup:
 +VACATION_SENDER=`formail -rx "To:"`
 +VACATION_LIST=$HOME/.vacation.list
 +VACATION_MSG=$HOME/.vacation.msg
 +VACATION_DB=$HOME/.vacation.db
 +
 +## Send vacation(1) notification if SENDER is in VACATION_LIST :
 +:0 c  # "c" => keep a copy of msg
 +## uncomment next line to do selective notifications
 +#* ? egrep $VACATION_SENDER $VACATION_LIST
 +| /usr/bin/vacation -F R -f $VACATION_DB -m $VACATION_MSG sdf_user
 +</code>
 +
 +The ''$HOME/.vacation.list'' is just a simple text file listing those email addresses you want to send notifications to, one per line. If you don't need the functionality just leave the ‘''egrep''’ line commented out.
 +
 +Note that ''$HOME/.vacation.db'' still needs to be initialized since this filter is just a pipe to vacation(1) which does the real processing.
 +
 +==== Misc: ====
 +
 +  * There is a "pure procmail" filter option that implements much of the vacation(1) functionality; see the procmailex(5) manpage for code.
 +  * Passing the ‘''-F R''’ option to vacation(1) forces checking of the Return-Path: field which can help in some cases. See the vacation(1) manpage for details as well as other options.
 +  * The ''$HOME/.vacation.db'' file is a hashed Burkeley DB binary file. It can be read somewhat using strings(1); useful for determining who has been auto-replied to: <code>
 +      % strings $HOME/.vacation.db | grep "@"
 +      frog@mud.bog
 +      itchy@bed.bug
 +</code>
 +
 +----
 +
 +$Id: vacation_auto-responder.html,v 1.4 2014/11/23 00:05:00 jgw Exp $ [[http://sdf.org/?tutorials/vacation_auto-responder|Setting up the vacation(1) email auto-responder on SDF:]] - traditional link (using [[wp>Revision_Control_System|RCS]])