This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

email with attachement gives image size 0
#1
Hello,

I have a script that sends an email with attached foscam camera snaphots when my doorbell is pushed.

That works great for months, but after some time it crashed my lm4 as following:
- when my doorbell is pushed i receive an email with size 0 images. every doorbell push i receive that mail with size 0 image
- so i try to find the problem and test my code manual with a resident script (sleepinterval 60), the same code as my event-based script

Code:
require('user.nit_email') mail({'test@test.nl'}, 'Test', 'Test message.', 'std_camera_2')
-I receive every 60 seconds an email, thats correct. But when i stop/deactivate this script i also receive every 60 seconds the email, why?
-So i need to restart my lm4 to solve this issue.

Nit_email

Code:
local from_name = 'HomeLynk' local settings = {    -- "from" field, only e-mail must be specified here    from = 'test@test.nl',    -- smtp username    --user = '',    -- smtp password    --password = '',    -- smtp server    server = '1.2.3.4',    -- smtp server port    port = 25,    -- enable ssl, required for gmail smtp    --secure = 'sslv23',  } local escape = function(v)  return '<' .. tostring(v) .. '>' end -- send an e-mail, function mail(to, subject, message, att)  -- make sure these settings are correct  local smtp = require('socket.smtp')  if att then    local mime = require('mime')         local ltn12 = require('ltn12')    -- generate attachements    bodyAtt = handleAtt(att, 'start')  else    bodyAtt = {"",""}  end    if type(to) ~= 'table' then    to = { to }  end    for index, email in ipairs(to) do    to[ index ] = escape(email)  end       settings.source = smtp.message({    headers = {      from = from_name..escape(settings.from),      to = table.concat(to, ', '),      subject = subject,    },    body = {        --preamble = "Hello Recipient, \r\n" .. "This is your e-mail with a picture attached.",        {          header = {            ['Content-type'] = 'text/html; charset=utf-8',          },          body = mime.eol(0, message),        },        bodyAtt[1],bodyAtt[2], -- get attachements if exists (max 2 for now)  <---todo:make it dynamic        --epilogue = "That's it folks! :)"    }  })  bodyAtt = nil    -- fixup from field  settings.from = escape(settings.from)  settings.rcpt = to  smtp.send(settings)  if att then    handleAtt(att, 'end')  end end -- std_camera: snapshot camera voordeur -- std_camera_b: snapshot camera voordeur en achterdeur function handleAtt(att, handle)  if handle == "start" then    if att == "std_camera" then      require('user.nit_camera')      dst = '/tmp/capture.jpg'      local url = string.format(url_cmdFoscam, cam_voordeur, cam_port, 'snapPicture2', '', cam_usr2, cam_pwd2)             local cmd = string.format('wget -O %q %q', dst, url)             os.execute(cmd)      local attachment = ltn12.source.chain( ltn12.source.file(io.open(dst, 'r')), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )      return      {        {          headers = {            ['Content-type'] = 'image/jpeg; name="image.jpg"',            ['Content-disposition'] = 'attachment; filename="image.jpg"',            ['Content-transfer-encoding'] = 'BASE64',          },          body = attachment        }             }        elseif att == "std_camera_b" then      require('user.nit_camera')      dst1 = '/tmp/capture1.jpg'      dst2 = '/tmp/capture2.jpg'      local url1 = string.format(url_cmdFoscam, cam_voordeur, cam_port, 'snapPicture2', '', cam_usr2, cam_pwd2)      local url2 = string.format(url_cmdFoscam, cam_achterdeur, cam_port, 'snapPicture2', '', cam_usr2, cam_pwd2)             local cmd1 = string.format('wget -O %q %q', dst1, url1)             local cmd2 = string.format('wget -O %q %q', dst2, url2)      os.execute(cmd1)             os.execute(cmd2)      local attachment1 = ltn12.source.chain( ltn12.source.file(io.open(dst1, 'r')), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )      local attachment2 = ltn12.source.chain( ltn12.source.file(io.open(dst2, 'r')), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )      return      {        {          headers = {            ['Content-type'] = 'image/jpeg; name="image1.jpg"',            ['Content-disposition'] = 'attachment; filename="image1.jpg"',            ['Content-transfer-encoding'] = 'BASE64',          },          body = attachment1        },        {          headers = {            ['Content-type'] = 'image/jpeg; name="image2.jpg"',            ['Content-disposition'] = 'attachment; filename="image2.jpg"',            ['Content-transfer-encoding'] = 'BASE64',          },          body = attachment2        }      }        elseif att == "std_camera_2" then      require('user.nit_camera')      dst1 = '/tmp/capture1.jpg'      dst2 = '/tmp/capture2.jpg'      local url1 = string.format(url_cmdFoscam, cam_voordeur, cam_port, 'snapPicture2', '', cam_usr2, cam_pwd2)             local cmd1 = string.format('wget -O %q %q', dst1, url1)             local cmd2 = string.format('wget -O %q %q', dst2, url1)      os.execute(cmd1) -- direct snapshot      cmdFoscam(cam_voordeur, cam_port, 'ptzGotoPresetPoint', '&name=Deur') -- move to frontdoor             os.sleep(20) -- wait for 20 seconds      os.execute(cmd2) -- new snapshot      local attachment1 = ltn12.source.chain( ltn12.source.file(io.open(dst1, 'r')), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )      local attachment2 = ltn12.source.chain( ltn12.source.file(io.open(dst2, 'r')), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )      return      {        {          headers = {            ['Content-type'] = 'image/jpeg; name="image1.jpg"',            ['Content-disposition'] = 'attachment; filename="image1.jpg"',            ['Content-transfer-encoding'] = 'BASE64',          },          body = attachment1        },        {          headers = {            ['Content-type'] = 'image/jpeg; name="image2.jpg"',            ['Content-disposition'] = 'attachment; filename="image2.jpg"',            ['Content-transfer-encoding'] = 'BASE64',          },          body = attachment2        }      }    end    elseif handle == "end" then    if att == "std_camera" then      os.remove(dst)    elseif att == "std_camera_b" then      os.remove(dst1)      os.remove(dst2)    elseif att == "std_camera_2" then      os.remove(dst1)      os.remove(dst2)    end  end   end

Nit_camera
Code:
-- snapshot urls cam_voordeur = '2.2.2.2' cam_achterdeur = '2.2.2.3' cam_port = 80 cam_usr = 'user' cam_pwd = 'password' cam_usr2 = 'user2' cam_pwd2 = 'password2' -- start command urls url_cmdFoscam = 'http://%s:%s/cgi-bin/CGIProxy.fcgi?cmd=%s%s&usr=%s&pwd=%s' -- Foscam camera command function cmdFoscam(iCamera, iPort, iCmd, iParam)  local url, response  url = string.format(url_cmdFoscam, iCamera, iPort, iCmd, iParam, cam_usr, cam_pwd)         if (url) then      require('socket.http')    socket.http.TIMEOUT = 5    response = socket.http.request( url_encode(url) )  end  return response end
Reply


Messages In This Thread
email with attachement gives image size 0 - by gjniewenhuijse - 26.10.2017, 08:52

Forum Jump: