|
|
@@ -2,6 +2,7 @@
|
|
|
using OASystem.Domain.Dtos.QiYeWeChat;
|
|
|
using OASystem.Domain.ViewModels.QiYeWeChat;
|
|
|
using System.Diagnostics;
|
|
|
+using System.Net.Mail;
|
|
|
using System.Text.Json;
|
|
|
|
|
|
namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
|
|
|
@@ -18,12 +19,30 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
|
|
|
//private readonly string Email_AgentId = "1000004"; //E-Mail Id
|
|
|
//private readonly string Approve_AgentId = "3010040"; //审批 Id
|
|
|
//private readonly string GroupStatus_AgentId = "1000008"; //OA通知 Id
|
|
|
- private readonly string PersonnelAssistant_Corpsecret = "ig--IJd6TxWDMJ1wT4e-RDRcRX12v5GjB359DNATwJ4"; //人事助手凭证密钥
|
|
|
- private readonly string PunchCard_Corpsecret = "Xhrl37GOqlAjsu0VzUSJECaJdjzkDXQLbvrzRsZQb8M"; //打卡凭证密钥
|
|
|
- private readonly string Email_Corpsecret = "NA1zbJM15GmgjPYwDOqz59dIo1Wnug-MbU107MeUemc"; //E-Mail 凭证密钥
|
|
|
- private readonly string AddressBook_Corpsecret = "Y1tnjh7j-BvbqAytAoXZPUbmDR6dqLTL6mXtc6PZ7fo"; //通讯录同步 凭证密钥
|
|
|
- private readonly string Approve_Corpsecret = "k_Jo69Jw9Hqg_in-Rypbs30PNbxOYa1t4e-dxYuT-kw"; //审批 凭证密钥
|
|
|
- private readonly string GroupStatus_Corpsecret = "7J_ST3jTPzbZpFwl7ttToTVufjEx6O2wuApvKHxt2Ak"; //OA通知Secret
|
|
|
+ /// <summary>
|
|
|
+ /// 人事助手凭证密钥
|
|
|
+ /// </summary>
|
|
|
+ private readonly string PersonnelAssistant_Corpsecret = "ig--IJd6TxWDMJ1wT4e-RDRcRX12v5GjB359DNATwJ4"; // 人事助手凭证密钥
|
|
|
+ /// <summary>
|
|
|
+ /// 打卡凭证密钥
|
|
|
+ /// </summary>
|
|
|
+ private readonly string PunchCard_Corpsecret = "Xhrl37GOqlAjsu0VzUSJECaJdjzkDXQLbvrzRsZQb8M"; // 打卡凭证密钥
|
|
|
+ /// <summary>
|
|
|
+ /// E-Mail 凭证密钥
|
|
|
+ /// </summary>
|
|
|
+ private readonly string Email_Corpsecret = "NA1zbJM15GmgjPYwDOqz59dIo1Wnug-MbU107MeUemc"; // E-Mail 凭证密钥
|
|
|
+ /// <summary>
|
|
|
+ /// 通讯录同步 凭证密钥
|
|
|
+ /// </summary>
|
|
|
+ private readonly string AddressBook_Corpsecret = "Y1tnjh7j-BvbqAytAoXZPUbmDR6dqLTL6mXtc6PZ7fo"; // 通讯录同步 凭证密钥
|
|
|
+ /// <summary>
|
|
|
+ /// 审批 凭证密钥
|
|
|
+ /// </summary>
|
|
|
+ private readonly string Approve_Corpsecret = "k_Jo69Jw9Hqg_in-Rypbs30PNbxOYa1t4e-dxYuT-kw"; // 审批 凭证密钥
|
|
|
+ /// <summary>
|
|
|
+ /// OA通知Secret
|
|
|
+ /// </summary>
|
|
|
+ private readonly string GroupStatus_Corpsecret = "7J_ST3jTPzbZpFwl7ttToTVufjEx6O2wuApvKHxt2Ak"; // OA通知Secret
|
|
|
|
|
|
private readonly DateTime _1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0);
|
|
|
private readonly JobPostRepository _jobPostRep;
|
|
|
@@ -359,6 +378,117 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ #region 邮件
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发送邮件
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto">发送邮件的请求对象</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<EmailResult> EmailSendAsync(EmailRequestDto dto)
|
|
|
+ {
|
|
|
+ EmailResult emailResult = new();
|
|
|
+
|
|
|
+ // 参数验证
|
|
|
+ if (dto.ToEmails == null) return new EmailResult() { errcode = -1, errmsg = "收件人邮箱列表不能为空" };
|
|
|
+ if (string.IsNullOrEmpty(dto.Subject)) return new EmailResult() { errcode = -1, errmsg = "邮件主题不能为空" };
|
|
|
+ if (string.IsNullOrEmpty(dto.Body)) return new EmailResult() { errcode = -1, errmsg = "邮件内容不能为空" };
|
|
|
+
|
|
|
+ // 当前内容大小
|
|
|
+ long currentSize = GetUtf8ByteSize(dto.Body);
|
|
|
+ // 文件处理
|
|
|
+ var attachments = new List<Domain.ViewModels.QiYeWeChat.Attachment>();
|
|
|
+ var files = dto.Files;
|
|
|
+ if (files != null && files.Length > 0)
|
|
|
+ {
|
|
|
+ if (files.Length > 200) return new EmailResult() { errcode = -1, errmsg = "附件个数不能超过200个" };
|
|
|
+
|
|
|
+ foreach (var file in files)
|
|
|
+ {
|
|
|
+ if (file == null || file.Length == 0)
|
|
|
+ {
|
|
|
+ return new EmailResult() { errcode = -1, errmsg = "文件不能为空" };
|
|
|
+ }
|
|
|
+
|
|
|
+ string base64String = string.Empty;
|
|
|
+ using (var memoryStream = new MemoryStream())
|
|
|
+ {
|
|
|
+ await file.CopyToAsync(memoryStream);
|
|
|
+ var bytes = memoryStream.ToArray();
|
|
|
+ base64String = Convert.ToBase64String(bytes);
|
|
|
+ }
|
|
|
+
|
|
|
+ var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file.FileName);
|
|
|
+ var extension = Path.GetExtension(file.FileName);
|
|
|
+ var feilName = $"{fileNameWithoutExtension}{extension}";
|
|
|
+
|
|
|
+ currentSize += GetUtf8ByteSize(base64String);
|
|
|
+ attachments.Add(new Domain.ViewModels.QiYeWeChat.Attachment() {
|
|
|
+ file_name = feilName,
|
|
|
+ content = base64String
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 限制大小
|
|
|
+ long maxSizeBytes = 50 * 1024 * 1024; // 50MB
|
|
|
+
|
|
|
+ if (currentSize > maxSizeBytes)
|
|
|
+ {
|
|
|
+ return new EmailResult() { errcode = -1, errmsg = "邮件内容和附件总大小不能超过50MB" };
|
|
|
+ }
|
|
|
+
|
|
|
+ Access_TokenView access_Token = await GetTokenAsync(3);
|
|
|
+ if (access_Token.errcode != 0)
|
|
|
+ {
|
|
|
+ emailResult.errcode = access_Token.errcode;
|
|
|
+ emailResult.errmsg = string.Format("【企业微信】【获取邮件列表】【Token】【Msg】{0}", access_Token.errmsg);
|
|
|
+ }
|
|
|
+ string url = string.Format("/cgi-bin/exmail/app/compose_send?access_token={0}", access_Token.access_token);
|
|
|
+
|
|
|
+ var reqData = new
|
|
|
+ {
|
|
|
+ to = new
|
|
|
+ {
|
|
|
+ emails = dto.ToEmails
|
|
|
+ },
|
|
|
+ cc = new
|
|
|
+ {
|
|
|
+ emails = dto.CcEmails
|
|
|
+ },
|
|
|
+ bcc = new
|
|
|
+ {
|
|
|
+ emails = dto.BccEmails
|
|
|
+ },
|
|
|
+ subject = dto.Subject,
|
|
|
+ content = dto.Body,
|
|
|
+ attachment_list = attachments
|
|
|
+ };
|
|
|
+
|
|
|
+ var reqContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(reqData), Encoding.UTF8, "application/json");
|
|
|
+ var create_Req = await _httpClient.PostAsync(url, reqContent);
|
|
|
+ var stringResponse = await create_Req.Content.ReadAsStringAsync();
|
|
|
+ emailResult = System.Text.Json.JsonSerializer.Deserialize<EmailResult>(stringResponse,
|
|
|
+ new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
|
|
|
+ return emailResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 计算字符串的字节大小(UTF-8编码)
|
|
|
+ /// </summary>
|
|
|
+ private static long GetUtf8ByteSize(string text)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(text))
|
|
|
+ {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return Encoding.UTF8.GetByteCount(text);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
#region 打卡
|
|
|
|
|
|
/// <summary>
|