继上一篇文章《阿里云ECS服务器无法发送邮件问题解决方案》之后,又发现登录的时候发送邮件中的时间和自己windows上的时间不一样,大概找了一下原因,是LocaDateTime使用的时区不一样导致的远程服务器和本机时间不一致。
只需要在LocaDateTime.now()方法中传一个参数,这个参数的类型为ZoneId,表示时区ID。于是,对原有的代码再次修改
- // 3、邮件通知
- if (emailProperties.isEnable()) {
- new Thread(() -> {
- // 定义日期格式
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
-
- MimeMessage message = javaMailSender.createMimeMessage();
- MimeMessageHelper helper = new MimeMessageHelper(message);
-
- try {
- String text = "您的账号" + username + "在广州登录了。" +
- "[" + LocalDateTime.now(ZoneId.of(systemSettingsProperties.getZoneId())).format(formatter) + "]";
-
- helper.setFrom(emailProperties.getFrom());
- helper.setTo(emailProperties.getTo());
- helper.setText(text);
-
- javaMailSender.send(message);
- } catch (MessagingException e) {
- e.printStackTrace();
- }
- }).start();
- }
ZoneId.of(systemSettingsProperties.getZoneId())这行代码通过ZoneId的静态方法of()创建了一个ZoneId对象,参数指定了时区ID,文章中使用的时区ID为Asia/Shanghai
- # 系统设置
- system:
- settings:
- # 时区ID
- zone-id: Asia/Shanghai
- # 是否开启登录日志
- login-log: false
- # 是否开启鉴权
- authorization: true
SystemSettingsProperties类用于读取配置信息,可以通过配置文件动态设置这个时区ID。
- package cn.edu.sgu.www.mhxysy.property;
-
- import lombok.Data;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.stereotype.Component;
-
- /**
- * @author heyunlin
- * @version 1.0
- */
- @Data
- @Component
- @ConfigurationProperties(prefix = "system.settings")
- public class SystemSettingsProperties {
-
- /**
- * 是否开启鉴权
- */
- private boolean authorization;
-
- /**
- * 是否开启日志
- */
- private boolean loginLog;
-
- /**
- * 时区ID
- */
- private String zoneId;
- }