2004-06-15 08:24:00 +02:00
|
|
|
-- load the smtp support and its friends
|
2004-11-27 08:58:04 +01:00
|
|
|
local smtp = require("socket.smtp")
|
2004-06-15 08:24:00 +02:00
|
|
|
local mime = require("mime")
|
|
|
|
local ltn12 = require("ltn12")
|
2004-05-31 01:30:00 +02:00
|
|
|
|
2005-08-23 07:53:14 +02:00
|
|
|
function filter(s)
|
|
|
|
if s then io.write(s) end
|
|
|
|
return s
|
|
|
|
end
|
|
|
|
|
|
|
|
source = smtp.message {
|
|
|
|
headers = { ['content-type'] = 'multipart/alternative' },
|
|
|
|
body = {
|
|
|
|
[1] = {
|
2007-03-12 05:08:40 +01:00
|
|
|
headers = { ['Content-type'] = 'text/html' },
|
2005-08-23 07:53:14 +02:00
|
|
|
body = "<html> <body> Hi, <b>there</b>...</body> </html>"
|
|
|
|
},
|
|
|
|
[2] = {
|
|
|
|
headers = { ['content-type'] = 'text/plain' },
|
|
|
|
body = "Hi, there..."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
r, e = smtp.send{
|
|
|
|
rcpt = {"<diego@tecgraf.puc-rio.br>",
|
|
|
|
"<diego@princeton.edu>" },
|
|
|
|
from = "<diego@princeton.edu>",
|
|
|
|
source = ltn12.source.chain(source, filter),
|
|
|
|
--server = "mail.cs.princeton.edu"
|
|
|
|
server = "localhost",
|
|
|
|
port = 2525
|
|
|
|
}
|
|
|
|
|
2004-06-15 08:24:00 +02:00
|
|
|
-- creates a source to send a message with two parts. The first part is
|
|
|
|
-- plain text, the second part is a PNG image, encoded as base64.
|
|
|
|
source = smtp.message{
|
|
|
|
headers = {
|
|
|
|
-- Remember that headers are *ignored* by smtp.send.
|
|
|
|
from = "Sicrano <sicrano@tecgraf.puc-rio.br>",
|
|
|
|
to = "Fulano <fulano@tecgraf.puc-rio.br>",
|
|
|
|
subject = "Here is a message with attachments"
|
|
|
|
},
|
|
|
|
body = {
|
|
|
|
preamble = "If your client doesn't understand attachments, \r\n" ..
|
2004-06-16 03:02:07 +02:00
|
|
|
"it will still display the preamble and the epilogue.\r\n" ..
|
2004-06-15 08:24:00 +02:00
|
|
|
"Preamble might show up even in a MIME enabled client.",
|
|
|
|
-- first part: No headers means plain text, us-ascii.
|
|
|
|
-- The mime.eol low-level filter normalizes end-of-line markers.
|
|
|
|
[1] = {
|
|
|
|
body = mime.eol(0, [[
|
|
|
|
Lines in a message body should always end with CRLF.
|
|
|
|
The smtp module will *NOT* perform translation. It will
|
|
|
|
perform necessary stuffing, though.
|
2004-06-17 09:00:43 +02:00
|
|
|
]])
|
2004-03-19 07:14:56 +01:00
|
|
|
},
|
2004-06-15 08:24:00 +02:00
|
|
|
-- second part: Headers describe content the to be an image,
|
|
|
|
-- sent under the base64 transfer content encoding.
|
|
|
|
-- Notice that nothing happens until the message is sent. Small
|
|
|
|
-- chunks are loaded into memory and translation happens on the fly.
|
|
|
|
[2] = {
|
|
|
|
headers = {
|
2007-03-12 05:08:40 +01:00
|
|
|
["ConTenT-tYpE"] = 'image/png; name="luasocket.png"',
|
2006-03-19 22:22:21 +01:00
|
|
|
["content-disposition"] = 'attachment; filename="luasocket.png"',
|
2007-06-12 01:44:54 +02:00
|
|
|
["content-description"] = 'our logo',
|
2004-06-15 08:24:00 +02:00
|
|
|
["content-transfer-encoding"] = "BASE64"
|
|
|
|
},
|
|
|
|
body = ltn12.source.chain(
|
2006-03-19 22:22:21 +01:00
|
|
|
ltn12.source.file(io.open("luasocket.png", "rb")),
|
2004-06-15 08:24:00 +02:00
|
|
|
ltn12.filter.chain(
|
|
|
|
mime.encode("base64"),
|
|
|
|
mime.wrap()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
},
|
|
|
|
epilogue = "This might also show up, but after the attachments"
|
|
|
|
}
|
2004-03-19 07:14:56 +01:00
|
|
|
}
|
|
|
|
|
2004-11-27 08:58:04 +01:00
|
|
|
|
2004-06-15 08:24:00 +02:00
|
|
|
r, e = smtp.send{
|
2004-06-22 06:49:57 +02:00
|
|
|
rcpt = {"<diego@tecgraf.puc-rio.br>",
|
|
|
|
"<diego@princeton.edu>" },
|
|
|
|
from = "<diego@princeton.edu>",
|
2005-08-12 07:56:32 +02:00
|
|
|
source = ltn12.source.chain(source, filter),
|
2007-03-12 05:08:40 +01:00
|
|
|
--server = "mail.cs.princeton.edu",
|
|
|
|
--port = 25
|
|
|
|
server = "localhost",
|
|
|
|
port = 2525
|
2004-06-15 08:24:00 +02:00
|
|
|
}
|
2004-06-16 03:02:07 +02:00
|
|
|
|
|
|
|
print(r, e)
|
2005-08-23 07:53:14 +02:00
|
|
|
|
|
|
|
|