哈士奇发布简单邮箱验证

该文章演示了如何在SpringBoot应用中配置邮件服务,包括在pom.xml中引入依赖,编辑yml文件配置SMTP服务器,创建EmailInfo实体类,定义Mapper接口和XML,以及业务层和服务实现,最后通过控制器发送邮件。

1.1、pom.xml 导入坐标

<!--mail-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

1.2、在 yml 文件中配置相应内容

spring:
  mail:
    host: smtp.qq.com
    username: 你自己的qq号@qq.com
    password: qq邮箱-》设置-》POP3/SMTP服务-》点击开启-》发验证码-》收到验证码后填入
    properties:
      mail:
        smtp:
          ssl:
            enable: true
        default-encoding: UTF-8
    port: 465

1.3、创建响应的实体类 【用了 lombok;懒】

@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmailInfo implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String title;
    private String toEmail;

}

1.4、创建Mapper接口

@Mapper
public interface EmailInfoMapper {
}

1.5、创建Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.it.hashiqiexercise.mapper.EmailInfoMapper">

</mapper>

1.6、创建业务层

public interface EmailInfoService {
    String send(EmailInfo emailInfo);
}

1.7、创建业务实现层

@Service
public class EmailInfoServiceImpl implements EmailInfoService {

    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    @Autowired
    private JavaMailSender mailSender;
    // 这里的@Value 是把 yaml文件中的spring.mail.username值进行引入
    @Value("${spring.mail.username}")
    private String from;

    @Override
    public String send(EmailInfo emailInfo) {
        try {
            SimpleMailMessage mailMessage = new SimpleMailMessage();
            // 主题
            mailMessage.setSubject("验证码邮件");
            // 生成随机数
            String code = randomCode();
            // 内容
            mailMessage.setText("您收到的验证码是:" + code + ", 五分钟有效,请妥善保管");
            // 发给谁
            mailMessage.setTo(emailInfo.getToEmail());
            // 自己的邮箱
            mailMessage.setFrom(from);
            // 发送
            mailSender.send(mailMessage);
        } catch (Exception e) {
            e.printStackTrace();
            return "发送失败,出现异常";
        }
        return "发送成功";
    }

    /**
     * 随机生成6位数的虚拟验证码
     * @return
     */
    public String randomCode() {
        StringBuilder str = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            str.append(random.nextInt(10));
        }
        return str.toString();
    }
}

1.8、创建控制层

@RestController
public class EmailInfoController {

    @Autowired
    EmailInfoService emailInfoService;

    @RequestMapping("email/send")
    public String send(EmailInfo emailInfo){
        return emailInfoService.send(emailInfo);
    }
}

1.9、页面路径测试

1.10、完成测试

 ok~

<think>好的,用户的问题是关于哈士奇的,需要生成详细回答和相关问题。首先,我需要确定用户的具体意图。用户可能想了解哈士奇的基本信息、饲养注意事项、常见行为问题等。由于问题比较宽泛,应该涵盖品种特点、饲养建议、健康管理等方面。 接下来要调用搜索工具获取相关信息。搜索关键词可能包括“哈士奇品种特征”、“哈士奇饲养指南”、“哈士奇常见行为”等。根据搜索结果,整合资料,确保内容准确可靠。 在回答结构上,按照要求分成多个方法或步骤,每个部分换行。避免使用第一人称和步骤词汇,比如“首先”、“然后”。需要特别注意格式规范,尤其是代码和公式部分,但这里可能不需要,不过要保持警惕。另外,引用内容不能集中在末尾,所以每个要点后需要分散引用来源的信息,但这里可能不需要具体引用,因为用户没有要求标明出处。 健康管理部分可能需要提到运动量、饮食需求、常见疾病,比如髋关节发育不良和眼部问题。训练部分要强调耐心和正向激励,避免惩罚。此外,哈士奇的耐寒性和不适合炎热气候的情况需要提及。 生成相关问题时要基于回答内容,比如品种起源、与其他犬种对比、训练具体方法等。确保问题相关且有延伸性,帮助用户进一步探索。 最后检查格式,确保没有使用违禁词汇,相关问题的标题正确,每个问题编号正确,没有多余空格或换行。确保回答详细且符合用户需求,同时严格遵守格式要求。</think>**品种特征** 西伯利亚哈士奇(Siberian Husky)是中型工作犬,起源于西伯利亚东北部。典型特征包括直立的三角形耳朵、浓密双层被毛、杏仁形蓝色/棕色或异色瞳。成年体重约16-27公斤,肩高51-60厘米。基因特征使其适应严寒环境,代谢效率可通过公式 $E = k \cdot (T_{body} - T_{environment})$ 估算能量消耗。 **饲养建议** 每日需至少1-2小时高强度运动(如奔跑、拉雪橇训练),避免因能量过剩引发破坏行为。饮食需高蛋白(建议蛋白质含量≥22%)、低碳水,幼犬阶段需补充钙磷比1.2:1的专用粮。夏季需提供阴凉处和充足饮水,环境温度超过25℃时建议启用降温措施。 **健康管理** 常见遗传疾病包括髋关节发育不良(HD)和进行性视网膜萎缩(PRA)。建议每年进行一次骨科X光检查和DNA检测。疫苗需覆盖犬瘟热、细小病毒及钩端螺旋体病。寿命通常12-15年,老年期需监控甲状腺功能。 **行为训练** 使用正向强化法进行服从训练,指令响应延迟需控制在3秒内。社会化训练应在出生后3-14周开始,接触至少50种不同声音/场景。拆家行为可通过环境丰容改善,例如提供冷冻填充食物的Kong玩具: ```python class EnrichmentToy: def __init__(self, material="橡胶", food_capacity=200): self.material = material self.food_capacity = food_capacity def freeze_food(self, food_type): return f"冷冻{food_type}填充至{self.food_capacity}g" ``` **毛发护理** 换毛期(春秋季)需每日梳理,使用undercoat rake去除底绒。洗澡频率不超过每月1次,避免破坏皮肤油脂层。被毛颜色由ASIP基因调控,黑色系个体携带显性等位基因$A^{a}$,灰色系为隐性纯合体$A^{b}A^{b}$。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值