I missing som intructions how to get it to run. I'm not that exprienced in REBOL.
The source file is saying someting about %notices.r :-) I can't find it.
----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, January 19, 2000 9:08 PM
Subject: REBOL [
> REBOL [
> Title: "SELMA Open Group"
> Author: "Carl Sassenrath"
> Date: 7-Sept-1999
> Purpose: {
> Simple Email List-Managing Application
> Implements an email list server that can run on any
> server or client. Keeps a log of messages and user
> activities. Allows recall of past messages. See
> %notices.r for help info and commands.
> }
> History: [
> 7-Sep-1999 Carl "Fixed nasty recursive email problem."
> 12-May-1999 Carl "Back in operation"
> ]
> ]
>
> ;-- Modes:
> net-watch: off
> test-mode: off
> proxy-test: off
> trace/net off
>
> ;-- Configuration:
> list-user: "list" ; user acount of the list
> list-pass: load %theword.r ; file that contains the password
> list-serv: "mail.rebol.net" ; hosting server name
> smtp-host: "mail.rebol.net"
> list-addr: [EMAIL PROTECTED] ; mailbox of SELMA
> manager: [[EMAIL PROTECTED] [EMAIL PROTECTED]] ; manager of the list
> list-tag: "[REBOL]" ; tag inserted on Subject line
> user-file: %user-list.r ; user database
> log-file: %user-log.r ; user event log
> save-dir: %msgs ; where messages are saved
> num-file: %next-num.r ; message save counter
> note-file: %notices.r ; SELMA's reply messages
> error-notify: %call-ty.r ; file of addresses to send on error
> check-period: 0:05
>
> if test-mode [
> list-user: "test"
> list-pass: load %theword.r
> list-serv: "mail.rebol.net" ; hosting server name
> list-addr: [EMAIL PROTECTED] ; mailbox of SELMA
> if proxy-test [
> system/schemes/default/proxy/host: "proxy"
> system/schemes/default/proxy/port-id: 1080
> system/schemes/default/proxy/type: 'socks
> ]
> user-file: %test-user-list.r ; user database
> log-file: %test-user-log.r ; user event log
> test-users: [[EMAIL PROTECTED] 0 [EMAIL PROTECTED] 0]
> ]
>
> test-addr: [EMAIL PROTECTED]
>
> ;--buggy in 2.1.2: if not exists? %msgs/ [make-dir %msgs/]
>
> digit: charset "0123456789"
> digits: [some digit]
>
> ;-- Setup:
> system/user/email: list-addr
> system/schemes/default/host: list-serv
> system/schemes/smtp/host: smtp-host
> system/schemes/default/timeout: 00:05
>
> system/standard/email: make system/standard/email [
> x-uidl: none received: none delivered-to: none precedence: "bulk"
> ]
>
> if test-mode [
> send: func [who msg] [
> print [newline "Sending to:" who newline "Len Message:" length? msg newline msg]
> input
> ]
> ]
>
> ;--Rewritten resend func to allow blocks of addresses
> resend: func [
> "Relay a message"
> to from message /local do-send smtp-port
> ][
> do-send: func [port data] [insert port reduce data]
> smtp-port: open [scheme: 'smtp]
> do-send smtp-port ["MAIL FROM: <" from ">"]
> foreach addr to [
> if email? addr [
> do-send smtp-port ["RCPT TO: <" addr ">"]
> ]
> ]
> do-send smtp-port ["DATA" message]
> close smtp-port
> ]
>
> Log-Event: func [event] [
> write/append log-file reform event ; bug: write/append/lines should work !!!
> write/append log-file newline
> ]
>
> Log-Message: func [text-msg] [
> write to-file rejoin [save-dir "/M" save-num] text-msg ; should be able to do
>dir/:save-num
> save num-file save-num: save-num + 1
> text-msg
> ]
>
> respond: func [to msg] [send to trim/auto msg]
>
> Add-User: func [user] [
> either find user-list user [
> respond user already-on-list
> ][
> append user-list reduce [user 0]
> save user-file user-list
> log-event ["new-user:" user now]
> respond user welcome
> ]
> ]
>
> Remove-User: func [user /local where] [
> either where: find user-list user [
> respond user farewell
> remove/part where 2
> save user-file user-list
> log-event ["rem-user:" user now]
> ][
> respond user not-on-list
> ]
> ]
>
> Post: func [
> "Uses SMTP protocol to post the message efficiently"
> message /local smtp-port content do-send text
> ][
> if find first message/from "selmatest" [
> send test-addr "bounce-back"
> exit
> ]
>
> if any [
> all [
> message/reply-to
> find first message/reply-to list-addr ; do not reply to self
> ]
> find first message/from list-addr ; do not reply to self
> find first message/from "selmatest"
> find first message/from "mailer-daemon"
> find first message/from "Postmaster"
> ][exit]
>
> either here: find user-list first message/from [
> if (length? message/content) > 100000 [
> send first message/from rejoin [trim/auto too-long]
> exit
> ]
> ;print ["sending:" message/from]
> either here/2 = (chk: checksum message/content) [
> send manager rejoin ["Duplicate Message:" message/from newline message/content]
> ][
> here/2: chk
> save user-file user-list
> ]
>
> content: message/content
> message/content: none
> message/X-UIDL: none
> message/Precedence: "bulk"
> message/delivered-to: none
> message/received: none
> message/return-path: none
> message/reply-to: list-addr
> message/to: list-addr
> message/date: to-idate message/date
> insert insert message/subject list-tag " "
> insert insert content net-utils/export message newline
> do-send: func [port data] [insert port rejoin data] ; temporary
> smtp-port: open [scheme: 'smtp]
> do-send smtp-port ["MAIL FROM: <" list-addr ">"]
> foreach [addr count] user-list [
> do-send smtp-port ["RCPT TO: <" addr ">"]
> ]
> do-send smtp-port ["DATA" content]
> close smtp-port
> ; foreach [addr count] user-list [
> ; send/header addr content message-header
> ; ]
> ][
> text: rejoin [trim/auto not-on-list newline newline copy/part message/content 10000]
> send manager rejoin ["Bad User:" message/from newline text]
> send first message/from text
> ]
> ]
>
> Repost: func [message /local here there re-cnt] [
> re-cnt: 0
> parse message/subject [
> some [to "re:" here: (remove/part here 3 re-cnt: re-cnt + 1)
> ["[REBOL]" 0 10 " " there: (remove/part here there) :here |
> "(" copy num digits ")" there:
> (re-cnt: re-cnt - 1 + (to-integer trim/tail num) remove/part here there) :here |
>none]
> ]
> ]
>
> insert tail trim message/subject " Re:"
> if re-cnt > 1 [
> insert tail message/subject reduce ["(" re-cnt ")"]
> ]
> post message
> ]
>
> Send-Msg-Num: func [user number /local file] [
> file: to-file rejoin [save-dir "/M" number]
> send user either exists? file [
> reform [list-tag "Message" number newline read file]
> ][
> reform ["Message" number "not available."]
> ]
> ]
>
> Process-Mail: func [
> mail-port [url! block!]
> /local mailbox message text-message commands user x1 x2
> ][
> commands: [
> "subscribe" (add-user user) |
> ["unsubscribe" | "resign"] (remove-user user) |
> ["help" | "info"] (respond user help-info) |
> ["selma-source"] (respond user read %selma.r) |
> ["suggest" | "suggestion"]
> (resend manager first message/from text-message) |
> "get" ["msg" | "message"] number: digits ; bug: number has space on head
> (send-msg-num user trim number) |
> [thru "re:" list-tag] (log-message text-message repost message) |
> (log-message text-message post message)
> ]
>
> mailbox: open mail-port
> print [length? mailbox "messages; messages beginning at" save-num]
> while [not tail? mailbox] [
> text-message: first mailbox
> message: import-email text-message
> message: make message [X-SELMA: reform [list-tag save-num - 1]]
> print ["from:" message/from length? text-message]
> user: first message/from
> if none? message/subject [message/subject: "none"]
> parse message/subject [commands]
> either test-mode [mailbox: next mailbox] [remove mailbox]
> ]
> close mailbox
> ]
>
> Do-SELMA: func [][
>
> do note-file
> either test-mode [
> user-list: test-users
> ][
> user-list: load user-file
> ]
> if not block? user-list [user-list: reduce [user-list]]
> save-num: either exists? num-file [load num-file] [1]
> if not exists? log-file [write log-file reform [ now newline ] ]
>
> loop 12 [
> print now
> process-mail [
> scheme: 'pop
> user: list-user
> pass: list-pass
> host: list-serv
> ]
> wait either test-mode [20][check-period]
> ]
> ]
>
> ;either test-mode [do-selma][
> ; if error? try [do-selma][send load error-notify "SELMA Error!!"]
> ;]
> do-selma
> quit
>
>