初步完成邮件功能
This commit is contained in:
20
DMS.Core/Interfaces/Repositories/IEmailAccountRepository.cs
Normal file
20
DMS.Core/Interfaces/Repositories/IEmailAccountRepository.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using DMS.Core.Models;
|
||||
|
||||
namespace DMS.Core.Interfaces.Repositories
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件账户仓储接口
|
||||
/// </summary>
|
||||
public interface IEmailAccountRepository : IBaseRepository<EmailAccount>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取默认邮件账户
|
||||
/// </summary>
|
||||
Task<EmailAccount> GetDefaultAccountAsync();
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有启用的邮件账户
|
||||
/// </summary>
|
||||
Task<List<EmailAccount>> GetActiveAccountsAsync();
|
||||
}
|
||||
}
|
||||
20
DMS.Core/Interfaces/Repositories/IEmailLogRepository.cs
Normal file
20
DMS.Core/Interfaces/Repositories/IEmailLogRepository.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using DMS.Core.Models;
|
||||
|
||||
namespace DMS.Core.Interfaces.Repositories
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件日志仓储接口
|
||||
/// </summary>
|
||||
public interface IEmailLogRepository : IBaseRepository<EmailLog>
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据邮件消息ID获取日志
|
||||
/// </summary>
|
||||
Task<List<EmailLog>> GetByEmailMessageIdAsync(int emailMessageId);
|
||||
|
||||
/// <summary>
|
||||
/// 根据日期范围获取日志
|
||||
/// </summary>
|
||||
Task<List<EmailLog>> GetByDateRangeAsync(DateTime startDate, DateTime endDate);
|
||||
}
|
||||
}
|
||||
20
DMS.Core/Interfaces/Repositories/IEmailMessageRepository.cs
Normal file
20
DMS.Core/Interfaces/Repositories/IEmailMessageRepository.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using DMS.Core.Models;
|
||||
|
||||
namespace DMS.Core.Interfaces.Repositories
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件消息仓储接口
|
||||
/// </summary>
|
||||
public interface IEmailMessageRepository : IBaseRepository<EmailMessage>
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据状态获取邮件消息
|
||||
/// </summary>
|
||||
Task<List<EmailMessage>> GetByStatusAsync(EmailSendStatus status);
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定时间范围内的邮件消息
|
||||
/// </summary>
|
||||
Task<List<EmailMessage>> GetByDateRangeAsync(DateTime startDate, DateTime endDate);
|
||||
}
|
||||
}
|
||||
20
DMS.Core/Interfaces/Repositories/IEmailTemplateRepository.cs
Normal file
20
DMS.Core/Interfaces/Repositories/IEmailTemplateRepository.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using DMS.Core.Models;
|
||||
|
||||
namespace DMS.Core.Interfaces.Repositories
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件模板仓储接口
|
||||
/// </summary>
|
||||
public interface IEmailTemplateRepository : IBaseRepository<EmailTemplate>
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据代码获取邮件模板
|
||||
/// </summary>
|
||||
Task<EmailTemplate> GetByCodeAsync(string code);
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有启用的邮件模板
|
||||
/// </summary>
|
||||
Task<List<EmailTemplate>> GetActiveTemplatesAsync();
|
||||
}
|
||||
}
|
||||
33
DMS.Core/Interfaces/Services/IEmailService.cs
Normal file
33
DMS.Core/Interfaces/Services/IEmailService.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using DMS.Core.Models;
|
||||
|
||||
namespace DMS.Core.Interfaces.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件服务接口
|
||||
/// </summary>
|
||||
public interface IEmailService
|
||||
{
|
||||
/// <summary>
|
||||
/// 异步发送邮件
|
||||
/// </summary>
|
||||
/// <param name="message">邮件消息</param>
|
||||
/// <param name="account">邮件账户</param>
|
||||
/// <returns>发送是否成功</returns>
|
||||
Task<bool> SendEmailAsync(EmailMessage message, EmailAccount account);
|
||||
|
||||
/// <summary>
|
||||
/// 异步接收邮件
|
||||
/// </summary>
|
||||
/// <param name="account">邮件账户</param>
|
||||
/// <param name="count">接收邮件数量</param>
|
||||
/// <returns>接收到的邮件列表</returns>
|
||||
Task<List<EmailMessage>> ReceiveEmailsAsync(EmailAccount account, int count = 10);
|
||||
|
||||
/// <summary>
|
||||
/// 测试邮件账户连接
|
||||
/// </summary>
|
||||
/// <param name="account">邮件账户</param>
|
||||
/// <returns>连接是否成功</returns>
|
||||
Task<bool> TestConnectionAsync(EmailAccount account);
|
||||
}
|
||||
}
|
||||
91
DMS.Core/Models/EmailAccount.cs
Normal file
91
DMS.Core/Models/EmailAccount.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace DMS.Core.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件账户配置实体
|
||||
/// </summary>
|
||||
public class EmailAccount
|
||||
{
|
||||
/// <summary>
|
||||
/// 账户ID
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 账户名称
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(100)]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 邮箱地址
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
public string EmailAddress { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SMTP服务器地址
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(100)]
|
||||
public string SmtpServer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SMTP端口号
|
||||
/// </summary>
|
||||
public int SmtpPort { get; set; } = 587;
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用SSL
|
||||
/// </summary>
|
||||
public bool EnableSsl { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(100)]
|
||||
public string Username { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 密码
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(100)]
|
||||
public string Password { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// IMAP服务器地址
|
||||
/// </summary>
|
||||
[MaxLength(100)]
|
||||
public string? ImapServer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// IMAP端口号
|
||||
/// </summary>
|
||||
public int ImapPort { get; set; } = 993;
|
||||
|
||||
/// <summary>
|
||||
/// 是否为默认账户
|
||||
/// </summary>
|
||||
public bool IsDefault { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.Now;
|
||||
}
|
||||
}
|
||||
43
DMS.Core/Models/EmailLog.cs
Normal file
43
DMS.Core/Models/EmailLog.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace DMS.Core.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件日志实体
|
||||
/// </summary>
|
||||
public class EmailLog
|
||||
{
|
||||
/// <summary>
|
||||
/// 日志ID
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 关联的邮件ID
|
||||
/// </summary>
|
||||
public int EmailMessageId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 日志级别
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(20)]
|
||||
public string Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 日志消息
|
||||
/// </summary>
|
||||
[Required]
|
||||
public string Message { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 异常详情
|
||||
/// </summary>
|
||||
public string? Exception { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
}
|
||||
}
|
||||
105
DMS.Core/Models/EmailMessage.cs
Normal file
105
DMS.Core/Models/EmailMessage.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace DMS.Core.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件消息实体
|
||||
/// </summary>
|
||||
public class EmailMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件ID
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 关联的邮件账户ID
|
||||
/// </summary>
|
||||
public int EmailAccountId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 发件人邮箱地址
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
public string From { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 收件人邮箱地址(多个用分号分隔)
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(1000)]
|
||||
public string To { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 抄送邮箱地址(多个用分号分隔)
|
||||
/// </summary>
|
||||
[MaxLength(1000)]
|
||||
public string? Cc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 密送邮箱地址(多个用分号分隔)
|
||||
/// </summary>
|
||||
[MaxLength(1000)]
|
||||
public string? Bcc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 邮件主题
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(500)]
|
||||
public string Subject { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 邮件正文
|
||||
/// </summary>
|
||||
[Required]
|
||||
public string Body { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否为HTML格式
|
||||
/// </summary>
|
||||
public bool IsHtml { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 邮件发送状态
|
||||
/// </summary>
|
||||
public EmailSendStatus Status { get; set; } = EmailSendStatus.Pending;
|
||||
|
||||
/// <summary>
|
||||
/// 发送时间
|
||||
/// </summary>
|
||||
public DateTime? SentAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.Now;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 邮件发送状态枚举
|
||||
/// </summary>
|
||||
public enum EmailSendStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// 待发送
|
||||
/// </summary>
|
||||
Pending,
|
||||
|
||||
/// <summary>
|
||||
/// 发送成功
|
||||
/// </summary>
|
||||
Sent,
|
||||
|
||||
/// <summary>
|
||||
/// 发送失败
|
||||
/// </summary>
|
||||
Failed
|
||||
}
|
||||
}
|
||||
62
DMS.Core/Models/EmailTemplate.cs
Normal file
62
DMS.Core/Models/EmailTemplate.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace DMS.Core.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 邮件模板实体
|
||||
/// </summary>
|
||||
public class EmailTemplate
|
||||
{
|
||||
/// <summary>
|
||||
/// 模板ID
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模板名称
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(100)]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模板代码(唯一标识)
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模板主题
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(500)]
|
||||
public string Subject { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模板内容
|
||||
/// </summary>
|
||||
[Required]
|
||||
public string Body { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否为HTML格式
|
||||
/// </summary>
|
||||
public bool IsHtml { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.Now;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user