Files
2026-01-30 15:04:00 +08:00

187 lines
5.3 KiB
Lua

local M = {}
require("app.app")
require("redis.conn")
local http = require("httpclient")
M.get_token = function(app_id,app_secret,rds)
local token = rds:get("aliyun_email_token")
if token then
return true,token
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
rds:setex("aliyun_email_token",data.expires_in,data.access_token)
return true,data.access_token
end
M.create_msg = function(from,from_name,to,to_name,title,content,app_id,app_secret,rds)
local ok,access_token = M.get_token(app_id,app_secret,rds)
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,rds)
local ok,access_token = M.get_token(app_id,app_secret,rds)
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,rds)
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,rds)
local ok,access_token = M.get_token(app_id,app_secret,rds)
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,rds)
local ok,access_token = M.get_token(app_id,app_secret,rds)
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,rds)
local ok,access_token = M.get_token(app_id,app_secret,rds)
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,rds)
local ok,access_token = M.get_token(app_id,app_secret,rds)
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