email.lua 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. local M = {}
  2. require("app.app")
  3. require("redis.conn")
  4. local http = require("httpclient")
  5. M.get_token = function(app_id,app_secret,rds)
  6. local token = rds:get("aliyun_email_token")
  7. if token then
  8. return true,token
  9. end
  10. local url = "https://alimail-cn.aliyuncs.com/oauth2/v2.0/token"
  11. local body = "grant_type=client_credentials&client_id="..app_id.."&client_secret="..app_secret
  12. local result,err = http.post(url,{
  13. ["Content-Type"] = "application/x-www-form-urlencoded"
  14. },body)
  15. if not result then
  16. return false,err
  17. end
  18. local data = cjson.decode(err)
  19. if data.error ~= nil and data.error ~= "" then
  20. return false,data.error_description
  21. end
  22. rds:setex("aliyun_email_token",data.expires_in,data.access_token)
  23. return true,data.access_token
  24. end
  25. M.create_msg = function(from,from_name,to,to_name,title,content,app_id,app_secret,rds)
  26. local ok,access_token = M.get_token(app_id,app_secret,rds)
  27. if not ok then
  28. return false,access_token
  29. end
  30. local body = {
  31. message = {
  32. subject = title,
  33. summary = content,
  34. priority = "PRY_HIGH",
  35. isReadReceiptRequested = false,
  36. from = {
  37. email = from,
  38. name = from_name
  39. },
  40. toRecipients = {
  41. {
  42. email = to,
  43. name = to_name
  44. }
  45. },
  46. body = {
  47. bodyText = content,
  48. bodyHtml = content
  49. }
  50. }
  51. }
  52. local url = "https://alimail-cn.aliyuncs.com/v2/users/"..from.."/messages"
  53. local result,err = http.post(url,{
  54. ["Content-Type"] = "application/json",
  55. ["Authorization"] = "Bearer "..access_token
  56. },cjson.encode(body))
  57. if not result then
  58. return false,err
  59. end
  60. local data = cjson.decode(err)
  61. if data == nil or data.message == nil or data.message.id == nil then
  62. return false,err
  63. end
  64. return true,data.message.id
  65. end
  66. M.send = function(from,from_name,to,to_name,title,content,app_id,app_secret,rds)
  67. local ok,access_token = M.get_token(app_id,app_secret,rds)
  68. if not ok then
  69. return false,access_token
  70. end
  71. local ok,msg_id = M.create_msg(from,from_name,to,to_name,title,content,app_id,app_secret,rds)
  72. if not ok then
  73. return false,msg_id
  74. end
  75. local body = {
  76. saveToSentItems = true
  77. }
  78. local url = "https://alimail-cn.aliyuncs.com/v2/users/"..from.."/messages/"..msg_id.."/send"
  79. local result,err = http.post(url,{
  80. ["Content-Type"] = "application/json",
  81. ["Authorization"] = "Bearer "..access_token
  82. },cjson.encode(body))
  83. if not result then
  84. return false,"send error:"..err
  85. end
  86. if err == "{}" then
  87. return true
  88. end
  89. return false,"send error:"..err
  90. --return true
  91. end
  92. M.create_user = function(email_name,password,nickname,jobtitle,app_id,app_secret,rds)
  93. local ok,access_token = M.get_token(app_id,app_secret,rds)
  94. if not ok then
  95. return false,access_token
  96. end
  97. local body = {
  98. email = email_name,
  99. password = password,
  100. name = nickname,
  101. jobTitle = jobtitle,
  102. departmentIds = {config.email.department_id},
  103. }
  104. local url = "https://alimail-cn.aliyuncs.com/v2/users"
  105. local result,err = http.post(url,{
  106. ["Content-Type"] = "application/json",
  107. ["Authorization"] = "Bearer "..access_token
  108. },cjson.encode(body))
  109. if not result then
  110. return false,"send error:"..err
  111. end
  112. local data = cjson.decode(err)
  113. if data.email == email_name then
  114. return true
  115. end
  116. return false,"create user error:"..err
  117. end
  118. M.delete_user = function(email_name,app_id,app_secret,rds)
  119. local ok,access_token = M.get_token(app_id,app_secret,rds)
  120. if not ok then
  121. return false,access_token
  122. end
  123. local url = "https://alimail-cn.aliyuncs.com/v2/users/"..email_name
  124. local result,err = http.delete(url,{
  125. ["Content-Type"] = "application/json",
  126. ["Authorization"] = "Bearer "..access_token
  127. })
  128. if not result then
  129. return false,"send error:"..err
  130. end
  131. return true
  132. end
  133. M.getDepartment = function(id,app_id,app_secret,rds)
  134. local ok,access_token = M.get_token(app_id,app_secret,rds)
  135. if not ok then
  136. return false,access_token
  137. end
  138. local url = "https://alimail-cn.aliyuncs.com/v2/departments/"..id
  139. local result,err = http.get(url,{
  140. ["Content-Type"] = "application/json",
  141. ["Authorization"] = "Bearer "..access_token
  142. })
  143. if not result then
  144. return false,"send error:"..err
  145. end
  146. print("getDepartment")
  147. print("result",result)
  148. print("err",type(err))
  149. print("err[data]",err)
  150. return true
  151. end
  152. M.getDepartmentList = function(app_id,app_secret,rds)
  153. local ok,access_token = M.get_token(app_id,app_secret,rds)
  154. if not ok then
  155. return false,access_token
  156. end
  157. local url = "https://alimail-cn.aliyuncs.com/v2/departments/$root/chain"
  158. local result,err = http.get(url,{
  159. ["Content-Type"] = "application/json",
  160. ["Authorization"] = "Bearer "..access_token
  161. })
  162. if not result then
  163. return false,"send error:"..err
  164. end
  165. print("getDepartmentList")
  166. print("result",result)
  167. print("err",type(err))
  168. print("err[data]",err)
  169. return true
  170. end
  171. return M