Script Library: 1213 scripts
 

jobbot.r

REBOL [ Title: "Jobbot Email Server" Date: 8-Sep-1999 File: %jobbot.r Author: "Carl Sassenrath" Purpose: { The email server we use for processing job related email. } library: [ level: 'advanced platform: none type: none domain: [email x-file other-net] tested-under: none support: none license: none see-also: none ] ] test-mode: off ; test mode (no send/save) ;---Setup options and controls: archive: %msgs ; directory to hold msgs counter: %msgcount.txt ; message counter sender: %jobs--rebol--com manager: %carl--rebol--com target: [%brenda--rebol--net %carl--rebol--com] insiders: [ ; don't send thank you to these people %brenda--rebol--net %brenda--rebol--com %jobs--rebol--com %carl--rebol--com %carl--rebol--net ] mailbox: open [ ;--- Setup mailbox message port object: scheme: 'pop host: "mail.rebol.net" user: "jobs" pass: load %theword.r ] set-net [%jobs--rebol--com mail.rebol.net] if test-mode [ ;replace functions to prevent actual operation save: func [file data] [print ["saving file:" file]] send: func [to msgs] [print ["sending to:" to "From:" from]] resend: func [to from msg] [ print ["resending to:" to "From:" from newline ];msg] ;confirm "Next?" ] ] quit-mail: func [] [close mailbox quit] thanks: {I got your message. Thank you for contacting us at REBOL Technologies. We will review your message soon. -Jobbot } process-msg: func [raw-mail] [ mail: import-email raw-mail if any [ find first mail/from "MAILER-DAEMON" find first mail/from "postmaster" find first mail/from %jobs--rebol find first mail/from %list--rebol not any [ find mail/to %jobs--rebol--com find mail/to %jobs--rebol--net ] ][probe mail/to exit] save counter count: count + 1 save archive/:count raw-mail print [count "From:" mail/from "Subject:" mail/subject "Date:" mail/date] print who: first either mail/reply-to [mail/reply-to][mail/from] sub: insert find/tail raw-mail "Subject:" reduce [" #" count ": "] insert find sub newline reduce [newline "X-Tag: jobbot processed"] either find insiders who [ print "internal" ][ send who thanks ] foreach user target [resend user manager raw-mail] ] do-jobbot: func [] [ print now count: load counter if tail? mailbox [print "no mail" quit-mail] print [length? mailbox "new messages"] while [not tail? mailbox] [ process-msg msg: first mailbox either test-mode [mailbox: next mailbox][remove mailbox] ] print [count "messages to date"] quit-mail ] do-jobbot
halt ;; to terminate script if DO'ne from webpage
Notes
  • email address(es) have been munged to protect them from spam harvesters. If you are a Library member, you can log on and view this script without the munging.
  • (jobs:rebol:net)
  • (list:rebol)
  • (jobs:rebol)
  • (carl:rebol:net)
  • (brenda:rebol:com)
  • (brenda:rebol:net)
  • (carl:rebol:com)
  • (jobs:rebol:com)