email with attachement gives image size 0 - gjniewenhuijse - 26.10.2017
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
RE: email with attachement gives image size 0 - admin - 26.10.2017
You should use LuaSocket to get a snapshot instead of wget. wget will fail if output file already exist so this might cause a problem with 0 sized attachments. There's no need to save snapshot to /tmp, you can use ltn12.source.string.
RE: email with attachement gives image size 0 - gjniewenhuijse - 26.10.2017
(26.10.2017, 09:06)admin Wrote: You should use LuaSocket to get a snapshot instead of wget. wget will fail if output file already exist so this might cause a problem with 0 sized attachments. There's no need to save snapshot to /tmp, you can use ltn12.source.string.
can you please give a little example?
RE: email with attachement gives image size 0 - admin - 26.10.2017
You already have a function for HTTP requests, just get your snapshot by calling cmdFoscam and then pass the result like this:
Code: local snapshot = cmdFoscam(...)
local attachment = ltn12.source.chain( ltn12.source.string(snapshot), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )
RE: email with attachement gives image size 0 - DGrandes - 11.07.2018
Hello,
I've tried to use this script but I can´t get it to work.
******************************************************************************
function handleAtt(att)
if att == "snapshoot" then
local snapshoot = 'http://IPCAMERA/cgi-bin/snapshot.cgi?'
local attachment = ltn12.source.chain( ltn12.source.string(snapshot), 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
}
}
end
end
The mail function send me a emai with jpg attachment but i can´t see anything.
When I use the link 'http://IPCAMERA/cgi-bin/snapshot.cgi?' i have to log in. How can I automatize with code?
Thanks
RE: email with attachement gives image size 0 - Daniel - 11.07.2018
Try like that
'http://user:password@IPCAMERA/cgi-bin/snapshot.cgi?'
RE: email with attachement gives image size 0 - DGrandes - 11.07.2018
(11.07.2018, 11:02)Daniel. Wrote: Try like that
'http://user:password@IPCAMERA/cgi-bin/snapshot.cgi?'
It doesn´t work.
I´ve tried diferent options and every time ask me user and pass.
https://www.ispyconnect.com/man.aspx?n=Dahua
RE: email with attachement gives image size 0 - buuuudzik - 11.07.2018
(11.07.2018, 14:12)DGrandes Wrote: (11.07.2018, 11:02)Daniel. Wrote: Try like that
'http://user:password@IPCAMERA/cgi-bin/snapshot.cgi?'
It doesn´t work.
I´ve tried diferent options and every time ask me user and pass.
https://www.ispyconnect.com/man.aspx?n=Dahua
You can try like here:
https://forum.logicmachine.net/showthread.php?tid=1073&pid=6338#pid6338
Maybe your camera support such params:
http://IP_address/cgi-bin/snapshot.cgi?chn=1&u=admin&p=password
RE: email with attachement gives image size 0 - DGrandes - 11.07.2018
(11.07.2018, 14:20)buuuudzik Wrote: (11.07.2018, 14:12)DGrandes Wrote: (11.07.2018, 11:02)Daniel. Wrote: Try like that
'http://user:password@IPCAMERA/cgi-bin/snapshot.cgi?'
It doesn´t work.
I´ve tried diferent options and every time ask me user and pass.
https://www.ispyconnect.com/man.aspx?n=Dahua
You can try like here:
https://forum.logicmachine.net/showthread.php?tid=1073&pid=6338#pid6338
Maybe your camera support such params:
http://IP_address/cgi-bin/snapshot.cgi?chn=1&u=admin&p=password
Don´t work..
My camera is IPC-HDBW1320E of Dahua and I try with both url of 'https://www.ispyconnect.com/man.aspx?n=Dahua':
It do something strange.. the first time I´ve tried the url it work and don´t ask me the user and pass, but once i use this url it doesn´t work..
I´ve tried with:
http://user:pass@CAMERAIP/cgi-bin/snapshot.cgi?1
http://admin:user@CAMERAIP/cgi-bin/snapshot.cgi?loginuse=user&loginpas=pass
http://admin:user@CAMERAIP/cgi-bin/snapshot.cgi?user=user&pass=pass
http://admin:user@CAMERAIP/cgi-bin/snapshot.cgi?user=user&pwd=pass
http://admin:user@CAMERAIP/cgi-bin/snapshot.cgi?u=user&p=pass
RE: email with attachement gives image size 0 - mlaudren - 11.07.2018
Can you try to add a fake parameter in the url like timestamp.
http://user:pass@CAMERAIP/cgi-bin/snapshot.cgi?1&ts=randomnumber
If it worked 1 time, and then fail, maybe there is a caching issue. By adding a parameter that change in the url, it is consider as a new request and will not look in the cache if any.
RE: email with attachement gives image size 0 - DGrandes - 12.07.2018
(11.07.2018, 18:21)mlaudren Wrote: Can you try to add a fake parameter in the url like timestamp.
http://user:pass@CAMERAIP/cgi-bin/snapshot.cgi?1&ts=randomnumber
If it worked 1 time, and then fail, maybe there is a caching issue. By adding a parameter that change in the url, it is consider as a new request and will not look in the cache if any.
Thanks!! this random number works perfectly. But with the script don´t attach the image correctly.. can you help me with the script?
Event-Based Script:
mail('MyEmail', 'ALERTA', '¡¡¡Alguien en casa!!!', 'captura')
Comon Functions:
function mail (to, subject, message, att)
-- make sure these settings are correct
local settings = {
-- "from" field, only e-mail must be specified here
from = '......',
-- smtp username
user = '.....',
-- smtp password
password = '......',
-- smtp server
server = 'smtp.gmail.com',
-- smtp server port
port = 465,
-- enable tls, required for gmail smtp
secure = 'tlsv1_2',
}
-- make sure these settings are correct
local smtp = require('socket.smtp')
local escape = function(v)
return '<' .. tostring(v) .. '>'
end
local from_name = '.......'
if att then
local mime = require('mime')
local ltn12 = require('ltn12')
-- generate attachements
bodyAtt = handleAtt(att) --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)
end
function handleAtt(att)
if att == "captura" then
local snapshot = 'CAMERAIP'--..math.random(0, 1000000000000)
log (snapshot)
local attachment = ltn12.source.chain( ltn12.source.string(snapshot), ltn12.filter.chain(mime.encode('base64'), mime.wrap()) )
return
{
{
headers = {
['Content-type'] = 'image/jpeg; name="Captura.jpg"',
['Content-disposition'] = 'attachment; filename="Captura.jpg"',
['Content-transfer-encoding'] = 'BASE64',
},
body = attachment
}
}
end
end
Thanks!!!
RE: email with attachement gives image size 0 - DGrandes - 16.08.2018
Hi,
I still don't know how to make a snapshoot from my ip camera and save or send it.
I have created a DNS to share the url in case you want to test it and help me. The camera is covered by privacy reasons...
IP : http://dnspruebacamara.myqnapcloud.com:5858/
user: admin
pass: 123456789
I have test it from web explorers (chrome or firefox) and it works perfectly from Them:
http://admin:123456789@dnspruebacamara.myqnapcloud.com:5858/cgi-bin/snapshot.cgi?1&ts=4561248/snapshot.jpeg
where ts=... is a random number that i must change by code, for the navigator not to ask me again the security credencials
.... But I can not get it work from the following code:
image_type = 'jpeg'
image_name_attachment = 'snapshot'
source_image_url = 'http://admin:123456789@dnspruebacamara.myqnapcloud.com:5858/cgi-bin/snapshot.cgi?1&ts=4561248/snapshot.jpeg'
where ts=... is a random number that i must change by code, for the navigator not to ask me again the security credencials
--Get remote (from HTTP) image and put image file to HL (will be deleted when end of script)
os.execute('wget -O /www/scada/vis/' .. image_name_attachment .. '.' .. image_type .. ' ' .. source_image_url .. '')
or I have also tried this other code, and it did not work either:
image = socket.http.request(source_image_url)
I know that I am doing something wrong, but I dont know what I am missing.
Can anyone help me please???
Best regards
RE: email with attachement gives image size 0 - admin - 16.08.2018
Your camera uses digest auth mechanism which is not supported by socket.http library.
Use this code to get your snapshot:
Code: local skthttp = require('socket.http')
local skturl = require('socket.url')
local ltn12 = require('ltn12')
local md5sum = require('encdec').md5
local hash = function(...)
return md5sum(table.concat({...}, ':'))
end
local parse_header = function(header)
local result = {}
for key, value in (header .. ','):gmatch('(%w+)=(.-),') do
if value:sub(1, 1) == '"' then -- strip quotes
result[ key:lower() ] = value:sub(2, -2)
else
result[ key:lower() ] = value
end
end
return result
end
local make_digest_header = function(headers)
local digest = {}
for _, header in ipairs(headers) do
if not header.unquote then
header[ 2 ] = '"' .. header[ 2 ] .. '"'
end
digest[ #digest + 1 ] = header[ 1 ] .. '=' .. header[ 2 ]
end
return 'Digest ' .. table.concat(digest, ', ')
end
local _request = function(req)
if not req.url then
return nil, 'missing url'
end
local url = skturl.parse(req.url)
local user, password = url.user, url.password
local sink = req.sink
if not user or not password then
return nil, 'missing credentials in url'
end
url.user, url.password, url.authority, url.userinfo = nil, nil, nil, nil
req.url = skturl.build(url)
local source
if req.source then
local chunks = {}
local capture = function(chunk)
if chunk then
chunks[ #chunks + 1 ] = chunk
end
return chunk
end
local chunk_id = 0
source = function()
chunk_id = chunk_id + 1
return chunks[ chunk_id ]
end
req.source = ltn12.source.chain(req.source, capture)
end
req.sink = nil
local body, code, hdrs = skthttp.request(req)
if code == 401 and hdrs['www-authenticate'] then
local ht = parse_header(hdrs['www-authenticate'])
if not ht.realm or not ht.nonce then
return nil, 'missing realm/nonce from response'
end
local qop = ht.qop
if qop and qop ~= 'auth' then
return nil, 'unsupported qop ' .. tostring(qop)
end
if ht.algorithm and ht.algorithm:lower() ~= 'md5' then
return nil, 'unsupported algo ' .. tostring(ht.algorithm)
end
local nc = '00000001'
local cnonce = string.format('%08x', os.time())
local uri = skturl.build({ path = url.path, query = url.query })
local method = req.method or 'GET'
local response = hash(
hash(user, ht.realm, password),
ht.nonce,
nc,
cnonce,
'auth',
hash(method, uri)
)
req.headers = req.headers or {}
local auth = {
{ 'username', user },
{ 'realm', ht.realm },
{ 'nonce', ht.nonce },
{ 'uri', uri },
{ 'cnonce', cnonce },
{ 'nc', nc, unquote = true },
{ 'qop', 'auth' },
{ 'algorithm', 'MD5' },
{ 'response', response },
}
if ht.opaque then
table.insert(auth, { 'opaque', ht.opaque })
end
req.headers.authorization = make_digest_header(auth)
if not req.headers.cookie and hdrs['set-cookie'] then
-- not really correct but enough for httpbin
local cookie = (hdrs['set-cookie'] .. ';'):match('(.-=.-)[;,]')
if cookie then
req.headers.cookie = '$Version: 0; ' .. cookie .. ';'
end
end
if req.source then
req.source = source
end
req.sink = sink
body, code, hdrs = skthttp.request(req)
end
return body, code, hdrs
end
local request = function(url)
local t = type(url)
if t == 'table' then
return _request(table.clone(url))
elseif t == 'string' then
local req = {}
local _, code, headers = _request({ url = url, sink = ltn12.sink.table(req) })
return table.concat(req), code, headers
end
end
url = 'http://admin:123456789@dnspruebacamara.myqnapcloud.com:5858/cgi-bin/snapshot.cgi?1&ts=123/snapshot.jpeg'
image, err, hdrs = request(url)
RE: email with attachement gives image size 0 - DGrandes - 17.08.2018
Thanks you!
It works perfectly
Best Regards
RE: email with attachement gives image size 0 - Igori - 25.02.2019
Hello!
I tried to adapt the script from post 13 to my task. But as a result, I get a file with an image, before which there is a piece of HTML code. In the logs we can see:
Code: stest 25.02.2019 13:44:51
* string: <!DOCTYPE html>
<html><head><title>Document Error: Unauthorized</title></head>
<body><h2>Access Error: 401 -- Unauthorized</h2>
<p>Authentication Error</p>
</body>
</html>
����
As we can see, the authorization on the camera does not pass, but I still get the image. In order to view it, I only need to remove the html header.
So, I have to edit the image before sending it by mail. The solution is simple, but I think it is not quite right
Code: a1, a2 = string.find(image,"</html>\r\n")
image = string.sub(image, a2+1)
How to solve the problem correctly?
Thanks!
RE: email with attachement gives image size 0 - admin - 25.02.2019
Your solution is correct, there's nothing else that can be done since the camera response is clearly wrong
RE: email with attachement gives image size 0 - Igori - 25.02.2019
OK. Thank you!
RE: email with attachement gives image size 0 - hollywoodperth - 14.08.2019
(16.08.2018, 12:50)I tried to use this code, hopefully I put it in right. Didn\t flag any errors in the log, so that's hopeful.I can't find the url of where the snapshot is sent to... any help??admin Wrote: Your camera uses digest auth mechanism which is not supported by socket.http library.
Use this code to get your snapshot:
Code: local skthttp = require('socket.http')
local skturl = require('socket.url')
local ltn12 = require('ltn12')
local md5sum = require('encdec').md5
local hash = function(...)
return md5sum(table.concat({...}, ':'))
end
local parse_header = function(header)
local result = {}
for key, value in (header .. ','):gmatch('(%w+)=(.-),') do
if value:sub(1, 1) == '"' then -- strip quotes
result[ key:lower() ] = value:sub(2, -2)
else
result[ key:lower() ] = value
end
end
return result
end
local make_digest_header = function(headers)
local digest = {}
for _, header in ipairs(headers) do
if not header.unquote then
header[ 2 ] = '"' .. header[ 2 ] .. '"'
end
digest[ #digest + 1 ] = header[ 1 ] .. '=' .. header[ 2 ]
end
return 'Digest ' .. table.concat(digest, ', ')
end
local _request = function(req)
if not req.url then
return nil, 'missing url'
end
local url = skturl.parse(req.url)
local user, password = url.user, url.password
if not user or not password then
return nil, 'missing credentials in url'
end
url.user, url.password, url.authority, url.userinfo = nil, nil, nil, nil
req.url = skturl.build(url)
local source
if req.source then
local chunks = {}
local capture = function(chunk)
if chunk then
chunks[ #chunks + 1 ] = chunk
end
return chunk
end
local chunk_id = 0
source = function()
chunk_id = chunk_id + 1
return chunks[ chunk_id ]
end
req.source = ltn12.source.chain(req.source, capture)
end
local body, code, hdrs = skthttp.request(req)
if code == 401 and hdrs['www-authenticate'] then
local ht = parse_header(hdrs['www-authenticate'])
if not ht.realm or not ht.nonce then
return nil, 'missing realm/nonce from response'
end
if ht.qop ~= 'auth' then
return nil, 'unsupported qop ' .. tostring(ht.qop)
end
if ht.algorithm and ht.algorithm:lower() ~= 'md5' then
return nil, 'unsupported algo ' .. tostring(ht.algorithm)
end
local nc = '00000001'
local cnonce = string.format('%08x', os.time())
local uri = skturl.build({ path = url.path, query = url.query })
local method = req.method or 'GET'
local response = hash(
hash(user, ht.realm, password),
ht.nonce,
nc,
cnonce,
'auth',
hash(method, uri)
)
req.headers = req.headers or {}
local auth = {
{ 'username', user },
{ 'realm', ht.realm },
{ 'nonce', ht.nonce },
{ 'uri', uri },
{ 'cnonce', cnonce },
{ 'nc', nc, unquote = true },
{ 'qop', 'auth' },
{ 'algorithm', 'MD5' },
{ 'response', response },
}
if ht.opaque then
table.insert(auth, { 'opaque', ht.opaque })
end
req.headers.authorization = make_digest_header(auth)
if not req.headers.cookie and hdrs['set-cookie'] then
-- not really correct but enough for httpbin
local cookie = (hdrs['set-cookie'] .. ';'):match('(.-=.-)[;,]')
if cookie then
req.headers.cookie = '$Version: 0; ' .. cookie .. ';'
end
end
if req.source then
req.source = source
end
body, code, hdrs = skthttp.request(req)
end
return body, code, hdrs
end
local request = function(url)
local t = type(url)
if t == 'table' then
return _request(table.clone(url))
elseif t == 'string' then
local req = {}
local _, code, headers = _request({ url = url, sink = ltn12.sink.table(req) })
return table.concat(req), code, headers
end
end
url = 'http://admin:123456789@dnspruebacamara.myqnapcloud.com:5858/cgi-bin/snapshot.cgi?1&ts=123/snapshot.jpeg'
image, err, hdrs = request(url)
RE: email with attachement gives image size 0 - admin - 15.08.2019
Log what output the server produces. Add this to the end of the script:
Code: log(image, err, hdrs)
RE: email with attachement gives image size 0 - puntukas - 02.10.2019
In my case I have a file with a silly header:
<?xml version="1.0" encoding="UTF-8" ?>
<userCheck>
<statusValue>401</statusValue>
<statusString>Unauthorized</statusString>
</userCheck>
so I need to add:
a1, a2 = string.find(image,"</userCheck>\n")
image = string.sub(image, a2+1)
to remove them.
Thanks.
|