View in color | License | Download script | History |
30-Apr 11:02 UTC
[0.05] 13.024k
[0.05] 13.024k
esend.rREBOL [
Title: "esend - smtp client"
Author: "RT, G. Scott Jones"
Email: %gjones05--m...
Date: 21-Apr-2001
File: %esend.r
Version: 0.1.0
Purpose: "A modified version of 'send for ESMTP"
History: [
0.1.0 [21-Apr-2001 "Modified RT 'send" "GSJ"]
]
Comment: {The bulk of this code is simply a copy
of Rebol Technolgies' code in /Core 2.5.0.3.1.
The only changes I made are as follows. I changed
the name of the function in order to distinquish this
version of 'send that uses an extended smtp scheme from
the original. The additional change is that 'esend uses
'esmtp scheme, which is located in a separate file. I
chose to use separate function name and scheme inorder
to avoid incompatibilty or confusion with Rebol
Techologies' current or future implementations. This
version is known to work with Microsoft Exchange Server
5.5, using base 64 encoded authentication.
--Scott Jones (21-Apr-2001)
}
Usage: {Place this file in your REBOL directory, along with a
copy of esmtp.r. At either the interpreter prompt or the
user.r file, type:
do %esmtp.r ;separate file
do %esend.r
Then use 'esend as you would use 'send. The first time
the function is used, you will be prompted for the smtp
authentication username and password. These values are
stored in clear text in the current REBOL session for
later usage, but the values are not saved to disk for
security reasons.
}
library: [
level: none
platform: none
type: 'protocol
domain: [email protocol]
tested-under: none
support: none
license: none
see-also: none
]
]
esend: func [
{Send a message to an address (or block of addresses)}
address [email! block!] "An address or block of addresses"
message "Text of message. First line is subject."
/only "Send only one message to multiple addresses"
/header "Supply your own custom header"
header-obj [object!] "The header to use"
/local smtp-port content do-send
][
do-send: func [port data] [
foreach item reduce data [
if string? item [replace/all item "^/." "^/.."]]
insert port reduce data
]
smtp-port: open [scheme: 'esmtp]
if email? address [address: reduce [address]]
message: content: either string? message [copy message] [mold message]
if not header [
header-obj: make system/standard/email [
subject: copy/part message any [find message newline 50]
]
]
if none? header-obj/from [
if none? header-obj/from: system/user/email [net-error "Email header not set: no from address"]
]
if none? header-obj/to [header-obj/to: make string! 20]
if none? header-obj/date [header-obj/date: to-idate now]
either only [
do-send smtp-port ["MAIL FROM: <" header-obj/from ">"]
foreach addr address [
if email? addr [
do-send smtp-port ["RCPT TO: <" addr ">"]
]
]
insert insert message net-utils/export header-obj newline
do-send smtp-port ["DATA" message]
][
foreach addr address [
if email? addr [
do-send smtp-port ["MAIL FROM: <" header-obj/from ">"]
do-send smtp-port ["RCPT TO: <" addr ">"]
head insert clear header-obj/to addr
remove/part message content
content: insert message net-utils/export header-obj
content: insert content newline
do-send smtp-port ["DATA" message]
]
]
]
close smtp-port
] Notes
|