using System.ComponentModel.DataAnnotations;
using Dpz.Core.Entity.Base.MapperConfig;
using Dpz.Core.Public.Entity;

namespace Dpz.Core.Public.ViewModel;

public class VmEmailConfig : IMapFrom<EmailConfig>
{
    public string? Id { get; set; }

    /// <summary>
    /// 别名
    /// </summary>
    [Display(Name = "别名"), Required(ErrorMessage = "请填写别名")]
    public string? Name { get; set; }

    /// <summary>
    /// 邮箱名称
    /// </summary>
    [Display(Name = "邮箱名称"), Required(ErrorMessage = "请填写邮箱名称")]
    public string? EmailName { get; set; }

    /// <summary>
    /// Email地址
    /// </summary>
    [
        Required(ErrorMessage = "请填写email地址"),
        DataType(DataType.EmailAddress, ErrorMessage = "请填写正确的email地址")
    ]
    [Display(Name = "Email地址")]
    public string? Email { get; set; }

    /// <summary>
    /// 账户密码
    /// </summary>
    [
        Display(Name = "账户密码"),
        DataType(DataType.Password),
        Required(ErrorMessage = "请填写账户密码")
    ]
    public string? Password { get; set; }

    /// <summary>
    /// IMAP服务器地址
    /// </summary>
    [Required(ErrorMessage = "请填写IMAP服务器地址"), Display(Name = "IMAP服务器地址")]
    public string? ImapHost { get; set; }

    /// <summary>
    /// IMAP端口,默认993
    /// </summary>
    [
        Display(Name = "IMAP端口"),
        Range(1, 99999, ErrorMessage = "端口边界值为1-99999"),
        Required(ErrorMessage = "请填写IMAP端口")
    ]
    public int? ImapPort { get; set; } = 993;

    /// <summary>
    /// IMAP是否使用SSL
    /// </summary>
    [Display(Name = "IMAP是否使用SSL")]
    public bool ImapUseSsl { get; set; } = true;

    /// <summary>
    /// SMTP服务器地址
    /// </summary>
    [Required(ErrorMessage = "请填写SMTP服务器地址"), Display(Name = "SMTP服务器地址")]
    public string? SmtpHost { get; set; }

    /// <summary>
    /// SMTP端口,默认587
    /// </summary>
    [
        Display(Name = "SMTP端口"),
        Range(1, 99999, ErrorMessage = "端口边界值为1-99999"),
        Required(ErrorMessage = "请填写SMTP端口")
    ]
    public int? SmtpPort { get; set; } = 587;

    /// <summary>
    /// SMTP是否使用SSL
    /// </summary>
    [Display(Name = "SMTP是否使用SSL")]
    public bool SmtpUseSsl { get; set; } = false;

    /// <summary>
    /// 相关用户
    /// </summary>
    public VmUserInfo? AboutUser { get; set; }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了一个用于表示“邮箱配置”的视图模型(ViewModel):VmEmailConfig。它位于 Dpz.Core.Public.ViewModel 命名空间,引用了数据注解和一个映射接口。主要用途是作为前端表单/接口的数据载体,并配合数据验证与 UI 显示元数据,以及方便把实体 EmailConfig 映射到这个视图模型上(通常用于 AutoMapper 或类似的映射机制)。

关键点说明:

  • IMapFrom

    • 表示该 ViewModel 可以从实体 EmailConfig 映射而来,通常用于在映射配置中自动建立实体 <-> 视图模型 的映射。
  • 属性与数据注解(Validation / Display)

    • Id (string?):配置唯一标识(可空)。
    • Name (string?):别名;[Display] 指定显示名为“别名”;[Required] 表示必填,错误提示“请填写别名”。
    • EmailName (string?):邮箱名称;显示名和必填注解类似。
    • Email (string?):Email 地址;
      • [Required]:必填;
      • [DataType(DataType.EmailAddress)]:用于验证或在 UI 指示这是电子邮件类型(同时可用于格式验证、表单输入类型等);
      • [Display]:显示名“Email地址”。
    • Password (string?):
      • [DataType(DataType.Password)]:在表单渲染时通常会用密码输入框(隐藏字符);
      • [Required]:必填。
    • ImapHost (string?):IMAP 服务器地址,必填。
    • ImapPort (int?):IMAP 端口,默认值 993;
      • [Range(1, 99999)]:端口范围校验(提示“端口边界值为1-99999”);
      • [Required]:必填。
    • ImapUseSsl (bool):IMAP 是否使用 SSL,默认 true(通常 IMAP SSL 采用 993)。
    • SmtpHost (string?):SMTP 服务器地址,必填。
    • SmtpPort (int?):SMTP 端口,默认值 587;
      • [Range(1, 99999)] 和 [Required]。
    • SmtpUseSsl (bool):SMTP 是否使用 SSL,默认 false(但根据服务可能为 true,例如 SMTPS 为 465)。
    • AboutUser (VmUserInfo?):关联的用户信息(视图模型),可为空。
  • 可空类型与 Required 的关系

    • 许多属性使用可空类型(string?、int?),但同时有 [Required] 注解表示在模型验证阶段这些字段必须有值。可空仅表示在类型系统上允许 null,但验证会阻止空值通过。
  • 使用场景

    • 在 ASP.NET MVC / Razor / Web API 中作为绑定模型:表单提交时自动进行验证并显示 Display 名称与错误信息。
    • 在后端与数据库实体(EmailConfig)之间做映射(比如使用 AutoMapper),用于将持久化实体转换成前端需要的 DTO/VM,或反向转换。
  • 安全与注意事项(建议)

    • 密码字段应安全处理:不要明文日志记录、在存储时加密或使用安全凭据存储机制。
    • 如果在 API 中传输密码,建议使用 HTTPS 并考虑使用更安全的令牌机制或凭证存储。
    • 根据实际需要调整 SMTP/IMAP 的 SSL 默认值与端口。

简要总结:这是一个带有数据注解的邮箱配置视图模型,用于前端显示与表单验证,并支持与实体 EmailConfig 的映射。

评论加载中...