On 14/07/2019 18:20, Rick Harrison via use-livecode wrote:
The main snag I’m working on now is setting up
the server to send out the email to the user.
This morning I’m looking at the shell commands
and at tsNet SMTP possible solutions.
In case it helps, here's the code I use to send email from my LC server
account. I should know where this came from (and I suspect I should be
able to thank the original author), but that's lost info right now.
-- Alex.
-- mail
--
-- Emails the given message to the recipients specified.
-- Each address passed can have a name attached in the form "name
<address>".
-- Addresses can be passed as comma separated lists.
-- Attachements can be added by passing an array (integer indexed or
otherwise).
-- with each attachment itself being an array.
--
-- pTo - The addresses to send the message to
-- pSub - The message subject
-- pMsg - The message body
-- pFrom - The address of the message sender
-- pCc - Any cc addresses
-- pBcc - Any Bcc addresses
-- pHtml - Boolean, if the message is to be sent as html
-- pAtts - Array of all attachments to send, each attachment of the form:
-- * name: the name of the attachment
-- * path: the absolute path to the attachment
-- * type: the mime type of the attachment, defaults to
-- application/octet-stream
--
command mail pTo, pSub, pMsg, pFrom, pCc, pBcc, pHtml, pAtts
local tMsg
-- build the message header, adding the from, to and subject details
-- we also put any cc addresses in here, but not bcc (bcc addresses
hidden)
put "From:" && pFrom & return & "To:" && pTo & return & "Subject:"
&& pSub & \
return into tMsg if pCc is not empty then
put "Cc:" && pCc & return after tMsg
end if
-- if there are any attachments, we must send this email as multipart
-- with the message body and each attachment forming a part
-- we do this by specifying the message as multipart and generating
a unique boundary
if pAtts is an array then
local tBoundary
put "boundary" & the seconds into tBoundary
put "MIME-Version: 1.0" & return & "Content-Type:
multipart/mixed; boundary=" & \
wrapQ(tBoundary) & return & "--" & tBoundary & return after
tMsg
end if
-- add the actual message body, setting the content type appropriately
if pHtml is true then
put "Content-Type: text/html;" & return & return after tMsg
else
put "Content-Type: text/plain;" & return & return after tMsg
end if
put pMsg & return after tMsg
-- add each attachment as a new part of the message, separating using
-- the generated boundary
if pAtts is an array then
put "--" & tBoundary & return after tMsg
repeat for each element tAtt in pAtts
if there is a file tAtt["path"] then
if tAtt["type"] is empty then
get "application/octet-stream"
else
get tAtt["type"]
end if
put "Content-Type:" && it & "; name=" & wrapQ(tAtt["name"])
& ";" & \
return & "Content-Transfer-Encoding: base64;" &
return & return & \
base64Encode(URL ("binfile:" & tAtt["path"])) &
return & "--" & \
tBoundary & return after tMsg
end if
end repeat
end if
-- send the mail by piping the message we have just built to the
sendmail command
-- we must also send a copy of the message to the bcc addresses
get shell("echo" && wrapQ(shellEscape(tMsg)) && "|
/usr/sbin/sendmail" && \
wrapQ(shellEscape(pTo)) && "-f" && wrapQ(shellEscape(pFrom)))
if pBcc is not empty then
get shell("echo" && wrapQ(shellEscape(tMsg)) && "|
/usr/sbin/sendmail" && \
wrapQ(shellEscape(pBcc)) && "-f" && wrapQ(shellEscape(pFrom)))
end if
if there is a file "log_mail.txt" then
put "MAIL sent" && the seconds & CR & \
"TO:" && pTo & CR & \
"SUBJ:" && pSub & CR &CR after URL ("file:./log_mail.txt")
end if
end mail
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode