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 的映射。
评论加载中...