Files
daydaytalk-fwutils/target/aliyun/email.lua
2026-01-08 21:58:41 +08:00

192 lines
5.4 KiB
Lua

local M = {}
require("app.app")
local http = require("fwutils.httpclient")
M.get_token = function(app_id,app_secret)
local token = cache.get_json("aliyun_email_token")
if token then
if token.expires > os.time() + 60*60 then
return true,token.access_token
end
end
local url = "https://alimail-cn.aliyuncs.com/oauth2/v2.0/token"
local body = "grant_type=client_credentials&client_id="..app_id.."&client_secret="..app_secret
local result,err = http.post(url,{
["Content-Type"] = "application/x-www-form-urlencoded"
},body)
if not result then
return false,err
end
local data = cjson.decode(err)
if data.error ~= nil and data.error ~= "" then
return false,data.error_description
end
cache.set_json("aliyun_email_token",{
access_token = data.access_token,
expires = os.time() + data.expires_in
})
return true,data.access_token
end
M.create_msg = function(from,from_name,to,to_name,title,content,app_id,app_secret)
local ok,access_token = M.get_token(app_id,app_secret)
if not ok then
return false,access_token
end
local body = {
message = {
subject = title,
summary = content,
priority = "PRY_HIGH",
isReadReceiptRequested = false,
from = {
email = from,
name = from_name
},
toRecipients = {
{
email = to,
name = to_name
}
},
body = {
bodyText = content,
bodyHtml = content
}
}
}
local url = "https://alimail-cn.aliyuncs.com/v2/users/"..from.."/messages"
local result,err = http.post(url,{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer "..access_token
},cjson.encode(body))
if not result then
return false,err
end
local data = cjson.decode(err)
if data == nil or data.message == nil or data.message.id == nil then
return false,err
end
return true,data.message.id
end
M.send = function(from,from_name,to,to_name,title,content,app_id,app_secret)
local ok,access_token = M.get_token(app_id,app_secret)
if not ok then
return false,access_token
end
local ok,msg_id = M.create_msg(from,from_name,to,to_name,title,content,app_id,app_secret)
if not ok then
return false,msg_id
end
local body = {
saveToSentItems = true
}
local url = "https://alimail-cn.aliyuncs.com/v2/users/"..from.."/messages/"..msg_id.."/send"
local result,err = http.post(url,{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer "..access_token
},cjson.encode(body))
if not result then
return false,"send error:"..err
end
if err == "{}" then
return true
end
return false,"send error:"..err
--return true
end
M.create_user = function(email_name,password,nickname,jobtitle,app_id,app_secret)
local ok,access_token = M.get_token(app_id,app_secret)
if not ok then
return false,access_token
end
local body = {
email = email_name,
password = password,
name = nickname,
jobTitle = jobtitle,
departmentIds = {config.email.department_id},
}
local url = "https://alimail-cn.aliyuncs.com/v2/users"
local result,err = http.post(url,{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer "..access_token
},cjson.encode(body))
if not result then
return false,"send error:"..err
end
local data = cjson.decode(err)
if data.email == email_name then
return true
end
return false,"create user error:"..err
end
M.delete_user = function(email_name,app_id,app_secret)
local ok,access_token = M.get_token(app_id,app_secret)
if not ok then
return false,access_token
end
local url = "https://alimail-cn.aliyuncs.com/v2/users/"..email_name
local result,err = http.delete(url,{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer "..access_token
})
if not result then
return false,"send error:"..err
end
return true
end
M.getDepartment = function(id,app_id,app_secret)
local ok,access_token = M.get_token(app_id,app_secret)
if not ok then
return false,access_token
end
local url = "https://alimail-cn.aliyuncs.com/v2/departments/"..id
local result,err = http.get(url,{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer "..access_token
})
if not result then
return false,"send error:"..err
end
print("getDepartment")
print("result",result)
print("err",type(err))
print("err[data]",err)
return true
end
M.getDepartmentList = function(app_id,app_secret)
local ok,access_token = M.get_token(app_id,app_secret)
if not ok then
return false,access_token
end
local url = "https://alimail-cn.aliyuncs.com/v2/departments/$root/chain"
local result,err = http.get(url,{
["Content-Type"] = "application/json",
["Authorization"] = "Bearer "..access_token
})
if not result then
return false,"send error:"..err
end
print("getDepartmentList")
print("result",result)
print("err",type(err))
print("err[data]",err)
return true
end
return M