| using AutoMapper; | 
| using MailKit.Net.Smtp; | 
| using Microsoft.AspNetCore.Components.Forms; | 
| using MimeKit; | 
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; | 
| using System.Net; | 
| using System.Reflection; | 
| using WIDESEA_Core; | 
| using WIDESEA_Core.Authorization; | 
| using WIDESEA_Core.BaseRepository; | 
| using WIDESEA_Core.BaseServices; | 
| using WIDESEA_Core.Const; | 
| using WIDESEA_Core.Helper; | 
| using WIDESEA_Core.HttpContextUser; | 
| using WIDESEA_DTO.System; | 
| using WIDESEA_IRepository; | 
| using WIDESEA_IServices; | 
| using WIDESEA_Model; | 
| using WIDESEA_Model.Models; | 
|   | 
| namespace WIDESEA_Services | 
| { | 
|     public class Sys_CompanyRegistrationService : ServiceBase<Sys_CompanyRegistration, ISys_CompanyRegistrationRepository>, ISys_CompanyRegistrationService | 
|     { | 
|         private readonly IUnitOfWorkManage _unitOfWorkManage; | 
|         private readonly IMapper _mapper; | 
|         private readonly ISys_ConfigService _configService; | 
|   | 
|         public Sys_CompanyRegistrationService(ISys_CompanyRegistrationRepository repository, | 
|             IUnitOfWorkManage unitOfWorkManage, | 
|             IMapper mapper, | 
|             ISys_ConfigService configService) : base(repository) | 
|         { | 
|             _unitOfWorkManage = unitOfWorkManage; | 
|             _mapper = mapper; | 
|             _configService = configService; | 
|         } | 
|   | 
|         public WebResponseContent RegisterCompany(RegistrationDTO registrationDto) | 
|         { | 
|             WebResponseContent content = new WebResponseContent(); | 
|             var invalidFields = new List<string>(); | 
|   | 
|             var properties = typeof(RegistrationDTO).GetProperties(); | 
|             foreach (var property in properties) | 
|             { | 
|                 var value = property.GetValue(registrationDto); | 
|                 // 检查字段值是否为空 | 
|                 if ((value == null || string.IsNullOrWhiteSpace(value.ToString()))) | 
|                 { | 
|                     // 将空字段名称添加到 invalidFields 集合中 | 
|                     invalidFields.Add(property.Name); | 
|                 } | 
|             } | 
|             Sys_CompanyRegistration registration = _mapper.Map<Sys_CompanyRegistration>(registrationDto); | 
|             // 如果存在空字段,则返回错误消息 | 
|             if (invalidFields.Any()) | 
|             { | 
|                 string invalidFieldsMessage = string.Join(", ", invalidFields); | 
|                 return content.Error($"以下字段不能为空: {invalidFieldsMessage}"); | 
|             } | 
|   | 
|             var isResult = base.Db.Queryable<Sys_CompanyRegistration>().Any(x => x.CompanyName == registrationDto.CompanyName); | 
|             if (isResult) | 
|             { | 
|                 return content.Error("已提交注册,请勿重复提交"); | 
|             } | 
|   | 
|             List<Sys_Config> sysConfigs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_RegExmail); | 
|             if (sysConfigs == null) | 
|             { | 
|                 return content.Error("尚未配置邮箱服务,请联系管理员配置邮箱转发"); | 
|             } | 
|   | 
|             // 设置默认值 | 
|             registration.RegistrationStatus = "待审核"; | 
|             registration.Creater = "Systeam"; | 
|   | 
|             // 创建 HTML 格式的邮件内容 | 
|             var bodyBuilder = new BodyBuilder(); | 
|             bodyBuilder.HtmlBody = $@" | 
|             <html> | 
|             <body> | 
|                 <h1>新用户注册通知</h1> | 
|                 <h2>公司详情</h2> | 
|                 <p><strong>公司名称:</strong> {registration.CompanyName}</p> | 
|                 <p><strong>公司类型:</strong> {registration.CompanyType}</p> | 
|                 <p><strong>行业类别:</strong> {registration.Industry}</p> | 
|                 <h2>联系人明细</h2> | 
|                 <p><strong>联系人姓名:</strong> {registration.ContactName}</p> | 
|                 <p><strong>联系人电话:</strong> {registration.ContactPhone}</p> | 
|                 <p><strong>联系人电子邮箱:</strong> {registration.ContactEmail}</p> | 
|                 <h2>隐私政策</h2> | 
|                 <p><strong>使用条款和隐私政策:</strong> {(registration.AgreeTerms ? "同意" : "不同意")}</p> | 
|                 <br/> | 
|                 <br/> | 
|                 <p>发件人,<br/>湖南宽海智能</p> | 
|             </body> | 
|             </html>"; | 
|             //"chenmeimei@hnkhzn.com" | 
|             isResult = SendEmail(sysConfigs, registrationDto, bodyBuilder); | 
|             // 保存到数据库 | 
|             BaseDal.AddData(registration); | 
|             return content.OK(); | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 发送邮箱 | 
|         /// </summary> | 
|         /// <param name="configs"></param> | 
|         /// <param name="registration"></param> | 
|         /// <returns></returns> | 
|         public bool SendEmail(List<Sys_Config> configs, RegistrationDTO registration, BodyBuilder bodyBuilder) | 
|         { | 
|             List<Sys_Config> sysConfigs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_BaseExmail); | 
|             if (sysConfigs == null) | 
|             { | 
|                 return false; | 
|             } | 
|   | 
|             // 获取 smtp 配置 | 
|             string _smtpServer = sysConfigs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_Server).ConfigValue ?? ""; | 
|             int _smtpPort = sysConfigs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_Port).ConfigValue.ObjToInt(); | 
|             string _smtpUser = sysConfigs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_User).ConfigValue ?? ""; | 
|             string _smtpPass = sysConfigs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_Pass).ConfigValue ?? ""; | 
|   | 
|             // 获取 邮件配置 | 
|             string _smtpTitle = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_Title).ConfigValue ?? ""; | 
|             string _smtpConTitle = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_ContentTitle).ConfigValue ?? ""; | 
|             string _smtpRegUser = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.SMTP_RegUser).ConfigValue ?? ""; | 
|   | 
|             // 创建邮件 | 
|             var message = new MimeMessage(); | 
|             message.From.Add(new MailboxAddress(_smtpTitle, _smtpUser)); | 
|             message.To.Add(new MailboxAddress("", _smtpRegUser)); | 
|             message.Subject = _smtpConTitle; | 
|   | 
|             message.Body = bodyBuilder.ToMessageBody(); | 
|   | 
|             // 发送邮件 | 
|             try | 
|             { | 
|                 using (var client = new SmtpClient()) | 
|                 { | 
|                     client.Connect(_smtpServer, _smtpPort, true); | 
|                     client.Authenticate(_smtpUser, _smtpPass); | 
|                     client.Send(message); | 
|                     client.Disconnect(true); | 
|                 } | 
|   | 
|                 Console.WriteLine("邮件发送成功!"); | 
|                 return true; | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 Console.WriteLine($"发送邮件时发生未知错误:{ex.Message}"); | 
|                 return false; | 
|             } | 
|         } | 
|     } | 
| } |