SpyderByte.com: OpenVMS.org dcl.OpenVMS.org de.OpenVMS.org fr.OpenVMS.org Tru64.org
   
Home About/Contact Search Archive Mobile Submit Procedure Sponsorship/Advertising
More Links
Printer friendly version
Share this story

dcl.OpenVMS.org
Admin: Ken Farmer
About: DCL (Digital Command Language) related news and procedures archive.


Navigation
Search Procedures
Post a Procedure
Documentation
Training
Vendors

Features
Bob Gezelter Articles:
Pitfalls of F$LOCATE & other Func
Logical Names (Part 5)
Logical Names (Part 4)
Report from the 1st OpenVMS Technical Symposium (Part 1)
Logical Names (Part 3)
Logical Names (Part 2)
Logical Names (Part 1)


RSS/RDF Feeds
OpenVMS.org (RSS 2.0)
dcl.OpenVMS.org (RSS 0.91)


Top 5 Stories
DCL_CHECK (7)
Free.com (2)
SHOW_PAGEFILE (7)
SHOW_BG (7)
Repeat.com (22)



Latest Procedures & News

Send Mail with Mime procedure
Jerry Alan Braga, Friday December 11 2009 @ 05:32PM EST
$ sendmail_save_verify := 'f$verify(0)'
$ if ("''sendmail_verify'" .nes. "") then set verify
$!
$! Send Mail with Mime
$!
$! Requirements:
$!	MC MIME utility for attachment rendering
$!	TCPIP send from File utility if using SMTP
$!
$! Logicals if Defined
$!	define/system sendmail_domain	! Overrides the default domain
$!	define/system sendmail_sff	! Send from file image to use for smtp
$!
$! Usage:
$!	@sendmail "to_address,..." "Subject" "Body" "Attachment,..." "delete" "cnvformat" "from_address"
$!
$ Main:
$!-----
$ Gosub Initialize
$ Gosub Header
$ Gosub Body
$ Gosub Attachments
$ Gosub Send
$ Gosub Finish
$!
$ sendmail_save_verify := 'f$verify(sendmail_save_verify)'
$ Exit
$!
$ Initialize:
$!-----------
$!
$ proc     = f$edit(f$parse(f$enviornment("PROCEDURE"),,,"NAME"),"LOWERCASE,COLLAPSE")
$ username = f$edit(f$getjpi("","USERNAME"),"LOWERCASE,COLLAPSE")
$ pid      = f$getjpi("","PID")
$ tmp_inp  = "sys$scratch:''proc'''pid'.tmp"
$ tmp_eml  = "sys$scratch:''proc'''pid'.eml"
$ tmp_tmp  = "sys$scratch:''proc'''pid'.tmp"
$ dq       = """
$ disdir   = "mail_list:"
$ pdfcnv   = "cool:txt2pdf.com"
$!
$! -- Get the Send From File Image --
$!
$ sff = f$trnlnm("''proc'_sff")
$ if (sff .eqs. "")
$ then 	sff = "$sys$system:tcpip$smtp_sff.exe"
$ else	sff = "$''sff'"
$ endif
$!
$! -- Get Email Domain --
$!
$ email_domain = f$edit(f$trnlnm("''proc'_domain"),"LOWERCASE,COLLAPSE")
$ if (email_domain .eqs. "") then email_domain = f$edit(f$trnlnm("TCPIP$SMTP_DOMAIN"),"LOWERCASE,COLLAPSE")
$ if (email_domain .eqs. "") then email_domain = f$edit(f$trnlnm("TCPIP$INET_DOMAIN"),"LOWERCASE,COLLAPSE")
$!
$! -- RFC Message ID --
$!
$ message_id = f$string(f$cvtime(,,"HUNDREDTH")) + f$string(f$cvtime(,,"SECONDOFYEAR")) + -
f$string(f$cvtime(,,"MINUTEOFYEAR")) + f$string(f$cvtime(,,"HOUROFYEAR")) + -
f$string(f$cvtime(,,"DAYOFYEAR")) + f$string(f$cvtime(,,"YEAR")) + -
f$string(f$cvtime(,,"HUNDREDTH"))
$!
$! -- RFC Date time Day, DD Mon YYYY HH:MM:SS offset --
$!
$ timezone_sign = ""
$ timezone_hh = 0
$ timezone_mm = 0
$ timezone_differential = f$trnlnm("SYS$TIMEZONE_DIFFERENTIAL")
$ if (timezone_differential .lt. 0)
$ then
$	timezone_sign = "-"
$	timezone_differential = timezone_differential * -1
$ endif
$ timezone_hh:
$ 	if (timezone_differential .lt. 3600) then goto timezone_done
$ 	timezone_differential = timezone_differential - 3600
$ 	timezone_hh = timezone_hh + 1
$ goto timezone_hh
$ timezone_done:
$ timezone_mm = timezone_differential / 60
$ timezone_rfc =  "''timezone_sign'''f$extract(1,2,f$string(100 + timezone_hh))'''f$extract(1,2,f$string(100 + timezone_mm))'"
$!
$ datetime    = -
f$edit(f$extract(0,1,f$cvtime(,"ABSOLUTE","WEEKDAY")),"UPCASE") + -
f$edit(f$extract(1,2,f$cvtime(,"ABSOLUTE","WEEKDAY")),"LOWERCASE") + ", " + -
f$cvtime(,"ABSOLUTE","DAY") + " " + -
f$edit(f$extract(0,1,f$cvtime(,"ABSOLUTE","MONTH")),"UPCASE") + -
f$edit(f$extract(1,2,f$cvtime(,"ABSOLUTE","MONTH")),"LOWERCASE") + " " + -
f$cvtime(,"ABSOLUTE","YEAR") + " " + -
f$cvtime(,"ABSOLUTE","HOUR") + ":" + -
f$cvtime(,"ABSOLUTE","MINUTE") + ":" + -
f$cvtime(,"ABSOLUTE","SECOND") + " " + -
timezone_rfc
$!
$! *** Start Parameters ***
$!
$ p_address 	= f$edit("''p1'","COLLAPSE")		! Email address(s)
$ p_subject 	= f$edit("''p2'","TRIM")		! Subject
$ p_body 	= f$edit("''p3'","TRIM")		! Can be A Filename or message
$ p_attach	= f$edit("''p4'","COLLAPSE")		! File(s)
$ p_delete	= f$edit("''p5'","UPCASE,COLLAPSE")	! DELETE Body/Attach File after
$ p_cnvfmt	= f$edit("''p6'","UPCASE,COLLAPSE")	! Convert to Format ("PDF","HTML","PRE")
$ p_from 	= f$edit("''p7'","COLLAPSE")		! Override From address
$!
$! *** End Parameters ***
$!
$! -- Check Log Logical --
$!
$ sff_log_level = 0
$ sff_log_level = f$edit(f$trnlnm("''proc'_log_level"),"UPCASE,COLLAPSE")
$ if (sff_log_level .eqs. "") then sff_log_level = 0
$!
$! -- Address Must be passed ---
$!
$ if (p_address .eqs. "?")
$ then
$	p_address = f$edit(f$getjpi("","USERNAME"),"LOWERCASE,COLLAPSE")
$ endif
$ if (p_address .eqs. "")
$ then
$	write sys$output ""
$	write sys$output "Email Address Required"
$	exit
$ endif
$!
$! Check for the Image Required
$!
$ if (f$search(f$extract(1,f$length(sff),sff)) .eqs. "")
$ then
$	write sys$output ""
$	write sys$output "Cannot Find ''sff'"
$	exit
$ endif
$!
$! Check to See if From Address has been overriden
$! If this is true assume the same domain as sender
$! This emulates VMS mail based
$! This is required as the mail/for will not work without @domain.com
$!
$ from_address = username
$ if (p_from .nes. "")
$ then
$ 	from_address = p_from
$ endif
$!
$ if (f$locate("@",from_address) .eq. f$length(from_address))
$ then
$	frdis = 0
$	open/error=nofrdis frid 'disdir''from_address'.dis
$	read/end_of_file=froef frid from_address
$	frdis = 1
$	freof:close frid
$	nofrdis: if (.not. frdis) then from_address = "''from_address'@''email_domain'"
$ endif
$ from_domain = f$extract(f$locate("@",from_address),f$length(from_address),from_address)
$ from_name = from_address
$ reply_address = from_address
$!
$ Header:
$!-------
$!
$ open/write f 'tmp_eml'
$!
$! If No Attachments are to be Used then Must Write Text Header
$! As MC MIME will not be used to Create it
$!
$ if (p_attach .eqs. "")
$ then
$	boundary = "------=_OpenVMS/MIME.''message_id'"
$ 	write f "Message-ID: <''message_id'@OpenVMS>"
$ 	write f "Mime-version: 1.0"
$ endif
$!
$! Need to determine if body has HTML based tags to replace content type
$!
$ eml_body_stxt = ""
$ eml_body_etxt = ""
$ eml_body_type = "text/plain"
$ eml_body_file = f$search("''p_body'")
$ eml_body_msg = ""
$ if (eml_body_file .nes. "")
$ then
$	open/read/error=b_eof b_id 'eml_body_file'
$	read/end_of_file=b_eof b_id eml_body_msg
$	close b_id
$	b_eof:
$ else
$ 	eml_body_msg = "''p_body'"
$ endif
$ if (f$locate("", f$edit(eml_body_msg,"UPCASE")) .ne. f$length(eml_body_msg))
$ then
$	eml_body_type = "text/html"
$ else
$	if (p_cnvfmt .eqs. "PRE")
$	then
$		eml_body_type = "text/html"
$		eml_body_stxt = "
"
$		eml_body_etxt = "
" $ endif $ endif $! $ write f "Content-Type: ''eml_body_type'; charset=ISO-8859-1" $ write f "Content-Transfer-Encoding: 7bit" $ write f "Content-Disposition: inline" $ write f "" $! $ close f $! $ Return $! $ Body: $!----- $! $! Body Of Message Can be an input file or a Text String $! $ if (eml_body_file .nes. "") $ then $ if ("''eml_body_stxt'" .nes. "") $ then $ open/append f 'tmp_eml' $ write f "''eml_body_stxt'" $ close f $ endif $! $ convert/append 'eml_body_file' 'tmp_eml' $! $ if ("''eml_body_etxt'" .nes. "") $ then $ open/append f 'tmp_eml' $ write f "''eml_body_etxt'" $ close f $ endif $ else $ open/append f 'tmp_eml' $ write f "''eml_body_stxt'''eml_body_msg'''eml_body_etxt'" $ close f $ endif $! $ Return $! $ Attachments: $!------------ $! $! Parse Multiple attachments and add according to file format $! using the MIME utility $! $ files = p_attach $ del_attach = "" $ afnd = 0 $ aloop: $ if (files .eqs. "") then goto aeof $ comma = f$locate(",",files) $ if (comma .ne. f$length(files)) $ then file = f$extract(0,comma,files) $ else file = files $ endif $! $ fspec = f$search(file) $ if (fspec .eqs. "") then goto adone $ del_file = fspec $ $ if (.not. afnd) $ then $ open/write f 'tmp_inp' $ write f "open/draft ''tmp_eml'" $ close f $ afnd = 1 $ endif $! $ if (p_cnvfmt .eqs. "PDF" .and. f$search(pdfcnv) .nes. "") $ then $ pdfspec = "sys$scratch:" + f$parse(fspec,,,"NAME") + ".pdf" $ @'pdfcnv' "''fspec'" "''pdfspec'" $ fspec = f$search(pdfspec) $ endif $! $ open/append f 'tmp_inp' $ write f "add ''fspec'" $ close f $! $ if (p_cnvfmt .eqs. "PDF") $ then $ if (del_attach .nes. "") then del_attach = del_attach + "," $ del_attach = del_attach + fspec $ endif $ if (p_delete .nes. "") $ then $ if (del_attach .nes. "") then del_attach = del_attach + "," $ del_attach = del_attach + del_file $ endif $! $ adone: $ if (comma .eq. f$length(files)) $ then files = "" $ else files = f$extract(comma+1,f$length(files),files) $ endif $ goto aloop $ aeof: if (.not. afnd) then return $ open/append f 'tmp_inp' $ write f "save" $ write f "exit" $ close f $! $! Run MIME utility with the imput file above $! $ define/user sys$input 'tmp_inp' $ define/user sys$output nl: $! $ mc mime $! $ delete/nolog/noconfirm 'tmp_inp';* $ if (del_attach .nes. "") then delete/nolog/noconfirm 'del_attach' $! $ Return $! $ Send: $!----- $! $! Parse thru all addresses and send out a email for each $! $ address = p_address - "<" - ">" $ fspec = f$search(tmp_eml) $ eloop: $ if (address .eqs. "") then goto eeof $ comma = f$locate(",",address) $ if (comma .ne. f$length(address)) $ then taddress = f$extract(0,comma,address) $ else taddress = address $ endif $! $! Look for a SMTP extended formated message Name Address $! and Rewrite Address as "Name"
$! $ to_address = taddress $ if (f$locate("@",taddress) .eq. f$length(taddress)) $ then $ todis = 0 $ open/error=notodis toid 'disdir''to_address'.dis $ read/end_of_file=toeof toid to_address $ todis = 1 $ toeof: close toid $ notodis: if (.not. todis) then to_address = "''taddress'@''email_domain'" $ endif $ to_domain = f$extract(f$locate("@",to_address),f$length(to_address),to_address) $ to_address = "<" + f$edit(to_address,"LOWERCASE") + ">" $ to_name = to_address $! $! If Email is Based on Using SMTP must write full Envelope Header $! Have to Write the Envelope Header for Each Destination $! $ open/write f 'tmp_eml' $ write f "MAIL FROM:<''from_address'>" $ write f "RCPT TO:",to_address $ write f "DATA" $ write f "Reply-To: <''reply_address'>" $ write f "From: ",dq,from_name,dq," <''from_address'>" $ write f "To: ",to_name $ write f "Subject: ",p_subject $ write f "Date: ",datetime $ close f $! $! Append the MIME rendered Version to This $! $ convert/append 'fspec' 'tmp_eml' $! $! Use the TCPIP SMTP Send From File Utility $! $ sff 'tmp_eml' -loglevel 'sff_log_level' $! $ if (comma .eq. f$length(address)) $ then address = "" $ else address = f$extract(comma+1,f$length(address),address) $ endif $ goto eloop $ eeof: $! $ delete/nolog/noconfirm 'tmp_eml';* $! $ return $! $ Finish: $!------- $! $ if (eml_body_file .nes. "" .and. p_delete .nes. "") $ then $ delete/nolog 'eml_body_file' $ endif $! $ exit

< GETLIB.COM | Procedure converts text to pdf when using sendmail.com >



ADVERTISEMENT:
Mailing Lists
OpenVMS.org News:
(Low volume newsletter)
Subscribe | Unsubscribe
OpenVMS.org Alerts:
(Security & Patch Alerts)
Subscribe | Unsubscribe

Sponsors | Affiliates







Virtual VAX & Alpha

HoffmanLabs.com

The OpenVMS Consultant


Interested in Advertising? Click here...

Friends of VMS
Encompass (HP Customer Community):
United States
Canada
Australia
Encompasserve
OpenVMS Hobbyist
Other Sites:
8-Cubed
Aaron's OpenVMS Hobbyist Blog
Arne Vajhøj
Deathrow Public OpenVMS Cluster
DJE Systems
Hunter Goatley
Ian Miller
Itanium Solutions Alliance
Syltrem VMS Page (French)
Kednos PL/I
OpenVMSPlanet.org
OpenVMS Rocks
Preatorian.net
Retrobeep
SYSMGR Blog
VAMP
Vaxination
XDelta


Add, edit, report problems here...

OpenVMS Webring

OpenVMS Webring

Prev

Random

Next

Prev5

List

Next5



Home About & Contact Search Archive Mobile Submit Procedure Sponsorship & Advertising

     Copyright © 2003-2006 SCORSE, LLC
OpenVMS® is a trademark of HP
All other trademarks are those of their owners.
    
 SpyderByte.com ;Technical Portals