瀏覽代碼

hotmail 邮件代码调试

Lyyyi 2 周之前
父節點
當前提交
d089f690e8

+ 8 - 0
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -3026,6 +3026,14 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
 
             var editInfo = dto.AiCrawledDetail;
 
+            // 如果 Guid 为空,说明是新增数据,需要生成新的 Guid
+            if (string.IsNullOrEmpty(editInfo.Guid))
+            {
+                editInfo.Guid = Guid.NewGuid().ToString("N");
+                editInfo.Source = 2; // 标记为手动新增数据
+                editInfo.OperatedAt = DateTime.Now;
+            }
+
             var opUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && x.Id == dto.CurrUserId).Select(x => x.CnName).FirstAsync() ?? "-";
             editInfo.Operator = opUserName;
             editInfo.OperatedAt = DateTime.Now;

+ 32 - 3
OASystem/OASystem.Api/OAMethodLib/HotmailEmail/HotmailEmailService.cs

@@ -26,9 +26,27 @@ namespace OASystem.API.OAMethodLib.HotmailEmail
             var senderName = _configuration["HotEmailConfig:SenderName"];
             var appPassword = _configuration["HotEmailConfig:AppPassword"];
 
+            // 移除应用密码中的所有 "-" 分隔符
+            appPassword = appPassword?.Replace("-", "");
+
+            // 验证配置必填项
+            if (string.IsNullOrEmpty(smtpServer) || string.IsNullOrEmpty(senderEmail) || string.IsNullOrEmpty(appPassword))
+            {
+                Console.WriteLine("[Email Error]: 邮件配置不完整");
+                return false;
+            }
+
             var message = new MimeMessage();
             message.From.Add(new MailboxAddress(senderName, senderEmail));
-            message.To.Add(new MailboxAddress("", toEmail));
+
+            // 校验收件人邮箱格式,避免无效地址报错
+            if (!MailboxAddress.TryParse(toEmail, out var recipient))
+            {
+                Console.WriteLine($"[Email Error]: 收件人邮箱格式错误 - {toEmail}");
+                return false;
+            }
+            message.To.Add(recipient);
+
             message.Subject = subject;
 
             var bodyBuilder = new BodyBuilder { HtmlBody = htmlContent };
@@ -37,6 +55,9 @@ namespace OASystem.API.OAMethodLib.HotmailEmail
             using var client = new SmtpClient();
             try
             {
+                // 显式设置超时时间,避免连接超时
+                client.Timeout = 30000; // 30秒超时
+
                 // 连接服务器 (Hotmail/Outlook 必须使用 StartTls)
                 await client.ConnectAsync(smtpServer, smtpPort, SecureSocketOptions.StartTls);
 
@@ -47,12 +68,20 @@ namespace OASystem.API.OAMethodLib.HotmailEmail
                 await client.SendAsync(message);
                 await client.DisconnectAsync(true);
 
+                Console.WriteLine($"[Email Success]: 邮件已发送至 {toEmail}");
                 return true;
             }
             catch (Exception ex)
             {
-                // 这里可以记录到你的 OASystem 日志库
-                Console.WriteLine($"[Email Error]: {ex.Message}");
+                // 打印完整异常链,定位真实错误
+                var errorMsg = $"[Email Error]: {ex.Message}";
+                var innerEx = ex.InnerException;
+                while (innerEx != null)
+                {
+                    errorMsg += $"\n[Inner Error]: {innerEx.Message}";
+                    innerEx = innerEx.InnerException;
+                }
+                Console.WriteLine(errorMsg);
                 return false;
             }
         }

+ 3 - 2
OASystem/OASystem.Api/appsettings.json

@@ -599,10 +599,11 @@
   },
    // 邮件发送配置
   "HotEmailConfig": {
-    "SmtpServer": "smtp.office365.com",
+    "SmtpServer": "smtp-mail.outlook.com",
     "SmtpPort": 587,
     "SenderEmail": "Roy.Lei.Atom@hotmail.com",
     "SenderName": "Roy Lei",
-    "AppPassword": "K3U5X-4W79Y-FP2JU-X25DB-6U9DU"
+    "AppPassword": "mbjefaowzicprbfx"
+    //"AppPassword": "apirccbinnuditof"
   }
 }

+ 1 - 1
OASystem/OASystem.Domain/Entities/Resource/Res_InvitationAI.cs

@@ -55,7 +55,7 @@ namespace OASystem.Domain.Entities.Resource
 
         /// <summary>
         /// 数据来源
-        /// 0-本地数据;1-第三方AI接口数据
+        /// 0-本地数据;1-第三方AI接口数据;2-用户手动输入数据
         /// </summary>
         public int Source { get; set; } = 0;