继上一篇文章《阿里云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;
}