View in color | License | Download script | History | Other scripts by: notchent |
4-Oct 2:33 UTC
[0.056] 15.154k
[0.056] 15.154k
core-email.rREBOL [
File: %core-email.r
Date: 9-Oct-2009
Title: "Core Email"
Author: Nick Antonaccio
Purpose: {
A simple email program that can run in REBOL/Core - entirely
at the command line (no VID GUI components or View graphics
are required). You can store configuration information for as
many email accounts as you'd like in the "accounts" block, and
easily switch between them at any point in the program.
Taken from the tutorial at http://musiclessonz.com/rebol.html
}
]
accounts: [
["pop.server" "smtp.server" "username" "password" %you--site--com]
["pop.server2" "smtp.server2" "username" "password" %you--site2--com]
["pop.server3" "smtp.server3" "username" "password" %you--site3--com]
]
empty-lines: "^/"
loop 400 [append empty-lines "^/"] ; # of lines it takes to clear screen
cls: does [prin {^(1B)[J}]
a-line:{*****************************************************************}
b-line: replace/all copy a-line "*" "-"
select-account: does [
cls
print b-line
forall accounts [
print rejoin ["^/" index? accounts ": " last first accounts]
]
print join "^/" b-line
selected: ask "^/Select an account #: "
if selected = "" [selected: 1]
t: pick accounts (to-integer selected)
system/schemes/pop/host: t/1
system/schemes/default/host: t/2
system/schemes/default/user: t/3
system/schemes/default/pass: t/4
system/user/email: t/5
]
send-email: func [/reply] [
cls
print rejoin [b-line "^/^/Send Email:^/^/" b-line]
either reply [
print join "^/^/Reply-to: " addr: form pretty/from
] [
addr: ask "^/^/Recipient Email Address: "
]
either reply [
print join "^/Subject: " subject: join "re: " form pretty/subject
] [
subject: ask "^/Email Subject: "
]
print {^/Body (when finished, type "end" on a seperate line):^/}
print join b-line "^/"
body: copy ""
get-body: does [
body-line: ask ""
if body-line = "end" [return]
body: rejoin [body "^/" body-line]
get-body
]
get-body
if reply [
rc: ask "^/Quote original email in your reply (Y/n)? "
if ((rc = "yes") or (rc = "y") or (rc = "")) [
body: rejoin [
body
"^/^/^/--- Quoting " form pretty/from ":^/"
form pretty/content
]
]
]
print rejoin ["^/" b-line "^/^/Sending..."]
send/subject to-email addr body subject
cls
print "Sent^/"
wait 1
]
read-email: does [
pretty: none
cls
print "One moment..."
mail: open to-url join "pop://" system/user/email
cls
while [not tail? mail] [
print "Reading...^/"
pretty: import-email (copy first mail)
either find pretty/subject "***SPAM***" [
print join "Spam found in message #" length? mail
mail: next mail
][
print empty-lines
cls
prin rejoin [
b-line
{^/The following message is #} length? mail { from: }
system/user/email {^/} b-line {^/^/}
{FROM: } pretty/from {^/}
{DATE: } pretty/date {^/}
{SUBJECT: } pretty/subject {^/^/} b-line
]
confirm: ask "^/^/Read Entire Message (Y/n): "
if ((confirm = "y") or (confirm = "yes") or (confirm = "")) [
print join {^/^/} pretty/content
]
print rejoin [
{^/} b-line {^/}
{^/[ENTER]: Go Forward (next email)^/}
{^/ "b": Go Backward (previous email)^/}
{^/ "r": Reply to current email^/}
{^/ "d": Delete current email^/}
{^/ "q": Quit this mail box^/}
{^/ Any #: Skip forward or backward this # of messages}
{^/^/} b-line {^/}
]
switch/default mail-command: ask "Enter Command: " [
"" [mail: next mail]
"b" [mail: back mail]
"r" [send-email/reply]
"d" [
remove mail
cls
print "Email deleted!^/"
wait 1
]
"q" [
close mail
cls
print"Mail box closed^/"
wait 1
break
]
] [mail: skip mail to-integer mail-command]
if (tail? mail) [mail: back mail]
]
]
]
select-account
forever [
cls
print b-line
print rejoin [
{^/"r": Read Email^/}
{^/"s": Send Email^/}
{^/"c": Choose a different mail account^/}
{^/"q": Quit^/}
]
print b-line
response: ask "^/Select a menu choice: "
switch/default response [
"r" [read-email]
"s" [send-email]
"c" [select-account]
"q" [
cls
print "DONE!"
; print rejoin [b-line "^/^/DONE!^/^/" b-line]
wait .5
quit
]
] [read-email]
] Notes
|