home *** CD-ROM | disk | FTP | other *** search
- /* SendMsgFun 1.1 (11.11.2000) */
-
- signal on halt
- signal on break_c
- signal on syntax
- signal on error
-
- SafeStart:
- global.keyword=word(arg(1),1)
- global.this=x2d(pragma("ID"))
- "MACRO" global.keyword global.this
- global.haltok=1
- if global.halted=1 then exit
-
- call start()
- call SafeQuit()
- /* never reached */
- /**************************************************************************/
- start: procedure expose global.
- parm.8.value="+0100"
-
- /* 0 1 2 3 4 5 6 7 8 */
- if ~ReadArgs("ID/A,TYPE/N,HOST/A,HOSTPORT/A,REALNAME/A,EMAIL/A,TO/A,SUBJECT/A,TEXT/A/K/F") then
- call call err(DosString(IoErr()))
-
- global.key=parm.0.value
-
- global.eol="D0A"x
-
- call info("Opening connection...")
- global.sock = OpenConnection("tcp",parm.3.value,parm.2.value)
- if global.sock<0 then do
- select
- when sock=-2 then call err("Host <"parm.2.value"> not found")
- otherwise call err("Can't connect to <"parm.2.value":"parm.3.value"> ("errorstring()")")
- end
- end
-
- if GetSockName(global.sock,"LOCALE")<0 then call err("Not enogh memory")
- thisHost=locale.addraddr
-
- call info("Entering...")
- call rec
-
- call info("Sending message...")
-
- msg=,
- "Message-ID: <smtp"time(s)"@"thisHost">" || global.eol ||,
- "From:" parm.4.value "<"parm.5.value">" || global.eol ||,
- "Subject:" parm.7.value || global.eol || ,
- "Date:" GMTInetDate() || global.eol
-
- if parm.1.value then do
-
- call sen "POST"
- call rec
-
- msg=msg || ,
- "Newsgroups:" parm.6.value || global.eol ||,
- "X-Newsposter: sendmsg/1.0" global.eol
- end
- else do
- call sen "MAIL FROM: <"parm.5.value">"
- call rec
-
- call sen "RCPT TO: <"parm.6.value">"
- call rec
-
- call sen "DATA"
- call rec
-
- msg=msg ||,
- "To: <"parm.6.value">" || global.eol ||,
- "X-Mailer: sendmsg/1.0"
- end
-
- call sen msg
-
- call sen parm.8.value
-
- call sen global.eol || "."
- call rec
-
- call sen "QUIT"
- call rec
-
- call info("Done.")
-
- "EOM" global.key
- exit
- /***********************************************************************/
- sen: procedure expose global.
- parse arg string
- string=string || global.eol
- if send(global.sock,string)~=length(string) then call err("Send error" ErrorString())
- return
- /***********************************************************************/
- rec: procedure expose global.
- if recv(global.sock,"BUF",256)<0 then call err("Recv error" ErrorString())
- parse var BUF code rest (global.eol)
- if code>=400 then call err("Error from server: ("code")"rest)
- return
- /***********************************************************************/
- GMTInetDate: procedure expose global.
- m.1="Jan";m.2="Feb";m.3="Mar";m.4="Apr";m.5="May";m.6="Jun";m.7="Jul";m.8="Aug";m.9="Sep";m.10="Oct";m.11="Nov";m.12="Dec"
- call GetDate("D","GMT")
- parse value(FormatDate("D","%d %m %Y %H:%M:%S")) with i j rest
- j=j%1
- return i m.j || rest
- /***************************************************************************/
- info: procedure expose global.
- parse arg msg
- "INFO" global.key msg
- return
- /***********************************************************************/
- err: procedure expose global.
- parse arg msg,err
- "ERR" global.key msg
- exit
- /***********************************************************************/
- break_c:
- call err "User break detected"
- /***********************************************************************/
- halt:
- call err "Global halt detected"
- /***********************************************************************/
- syntax:
- call err "Syntax error" rc sigl
- /***********************************************************************/
- error:
- call err "Error" rc sigl
- /***********************************************************************/
-