aboutsummaryrefslogtreecommitdiff
path: root/src/smtp.lua
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2005-08-12 05:56:32 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2005-08-12 05:56:32 +0000
commit0c3cdd5ef2485a79d6fec9261f2850c41577d5b3 (patch)
treed69164c9f815e2d0308ba3f0d15b18e67163d879 /src/smtp.lua
parent37f7af4b9f1250e3c3439df03d43cf291a4d6f37 (diff)
downloadluasocket-0c3cdd5ef2485a79d6fec9261f2850c41577d5b3.tar.gz
luasocket-0c3cdd5ef2485a79d6fec9261f2850c41577d5b3.tar.bz2
luasocket-0c3cdd5ef2485a79d6fec9261f2850c41577d5b3.zip
Final push for release...
Diffstat (limited to 'src/smtp.lua')
-rw-r--r--src/smtp.lua29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/smtp.lua b/src/smtp.lua
index 6850f7f..46df1ab 100644
--- a/src/smtp.lua
+++ b/src/smtp.lua
@@ -18,6 +18,7 @@ local tp = require("socket.tp")
18local ltn12 = require("ltn12") 18local ltn12 = require("ltn12")
19local mime = require("mime") 19local mime = require("mime")
20module("socket.smtp") 20module("socket.smtp")
21getmetatable(_M).__index = nil
21 22
22----------------------------------------------------------------------------- 23-----------------------------------------------------------------------------
23-- Program constants 24-- Program constants
@@ -111,12 +112,12 @@ function metat.__index:send(mailt)
111 self:data(ltn12.source.chain(mailt.source, mime.stuff()), mailt.step) 112 self:data(ltn12.source.chain(mailt.source, mime.stuff()), mailt.step)
112end 113end
113 114
114function open(server, port) 115function open(server, port, create)
115 local tp = socket.try(tp.connect(server or SERVER, port or PORT, TIMEOUT)) 116 local tp = socket.try(tp.connect(server or SERVER, port or PORT,
117 create, TIMEOUT))
116 local s = base.setmetatable({tp = tp}, metat) 118 local s = base.setmetatable({tp = tp}, metat)
117 -- make sure tp is closed if we get an exception 119 -- make sure tp is closed if we get an exception
118 s.try = socket.newtry(function() 120 s.try = socket.newtry(function()
119 if s.tp:command("QUIT") then s.tp:check("2..") end
120 s:close() 121 s:close()
121 end) 122 end)
122 return s 123 return s
@@ -165,10 +166,9 @@ end
165local function send_source(mesgt) 166local function send_source(mesgt)
166 -- set content-type if user didn't override 167 -- set content-type if user didn't override
167 if not mesgt.headers or not mesgt.headers["content-type"] then 168 if not mesgt.headers or not mesgt.headers["content-type"] then
168 coroutine.yield('content-type: text/plain; charset="iso-8859-1"\r\n') 169 coroutine.yield('content-type: text/plain; charset="iso-8859-1"\r\n\r\n')
169 end 170 else coroutine.yield("\r\n") end
170 -- finish headers 171 -- finish headers
171 coroutine.yield("\r\n")
172 -- send body from source 172 -- send body from source
173 while true do 173 while true do
174 local chunk, err = mesgt.body() 174 local chunk, err = mesgt.body()
@@ -182,21 +182,20 @@ end
182local function send_string(mesgt) 182local function send_string(mesgt)
183 -- set content-type if user didn't override 183 -- set content-type if user didn't override
184 if not mesgt.headers or not mesgt.headers["content-type"] then 184 if not mesgt.headers or not mesgt.headers["content-type"] then
185 coroutine.yield('content-type: text/plain; charset="iso-8859-1"\r\n') 185 coroutine.yield('content-type: text/plain; charset="iso-8859-1"\r\n\r\n')
186 end 186 else coroutine.yield("\r\n") end
187 -- finish headers
188 coroutine.yield("\r\n")
189 -- send body from string 187 -- send body from string
190 coroutine.yield(mesgt.body) 188 coroutine.yield(mesgt.body)
191
192end 189end
193 190
194-- yield the headers one by one 191-- yield the headers all at once
195local function send_headers(mesgt) 192local function send_headers(mesgt)
196 if mesgt.headers then 193 if mesgt.headers then
194 local h = ""
197 for i,v in base.pairs(mesgt.headers) do 195 for i,v in base.pairs(mesgt.headers) do
198 coroutine.yield(i .. ':' .. v .. "\r\n") 196 h = i .. ': ' .. v .. "\r\n" .. h
199 end 197 end
198 coroutine.yield(h)
200 end 199 end
201end 200end
202 201
@@ -237,12 +236,10 @@ end
237-- High level SMTP API 236-- High level SMTP API
238----------------------------------------------------------------------------- 237-----------------------------------------------------------------------------
239send = socket.protect(function(mailt) 238send = socket.protect(function(mailt)
240 local s = open(mailt.server, mailt.port) 239 local s = open(mailt.server, mailt.port, mailt.create)
241 local ext = s:greet(mailt.domain) 240 local ext = s:greet(mailt.domain)
242 s:auth(mailt.user, mailt.password, ext) 241 s:auth(mailt.user, mailt.password, ext)
243 s:send(mailt) 242 s:send(mailt)
244 s:quit() 243 s:quit()
245 return s:close() 244 return s:close()
246end) 245end)
247
248--getmetatable(_M).__index = nil