springboot实现简单的邮件发送和定时任务:
@RestController
@RequestMapping(value = "/send")
public class SendEmailController {
@Autowired
private MailService mailService;
@PostMapping("/email")
public ExecuteResult sendEmail(@RequestBody Email email) {
try {
mailService.sendMessage(email.getToEmail(), email.getSubject(), email.getText());
return new ExecuteResult(true, null);
} catch (Exception e) {
e.printStackTrace();
return new ExecuteResult(false, e.getMessage());
}
}
@Scheduled(cron = "0/5 * * * * ?")
public void test() {
Map<String, String> map = new HashMap<>();
String[] subjects = new String[] {"来自你可爱的小猪猪的告白信", "滴,来自你(●'◡'●)的猪猪表白打卡", "今天也有爱你哟(^U^)ノ~YO"};
String[] texts = new String[] {"我爱你嗷!婷宝宝,喵呜!", "今天也很爱你嗷!婷宝宝,喵呜!", "每天都很爱你嗷!婷宝宝,喵呜!"};
for (int i = 0; i < subjects.length; i++) {
map.put(subjects[i], texts[i]);
}
int index = new Random().nextInt(subjects.length);
Email email = new Email("xxxx@qq.com", subjects[index], map.get(subjects[index]));
sendEmail(email);
}
}
@Service
public class MailService {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String username;
@Async
public void sendMessage(String toEmail, String subject, String text) {
validateParams(toEmail, subject, text);
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(username);
message.setTo(toEmail);
message.setSubject(subject);
message.setText(text);
javaMailSender.send(message);
}
private void validateParams(String toEmail, String subject, String text) {
Assert.hasText(toEmail);
Assert.hasText(subject);
Assert.hasText(text);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExecuteResult implements Serializable {
private static final long serialVersionUID = 7979241061522354821L;
private boolean isSuccess;
private String errorMessage;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Email implements Serializable {
private static final long serialVersionUID = 4122128230869047193L;
private String toEmail;
private String subject;
private String text;
}
启动类添加支持定时任务注解:
@SpringBootApplication
@EnableScheduling
public class SpringBootAjaxApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAjaxApplication.class, args);
}
}
spring.mail.host: smtp.qq.com
spring.mail.username: xxx@qq.com (发送者邮箱)
spring.mail.password: xxxxx (qq邮箱里开启smtp时候绑定手机给的识别码)
spring.mail.properties.mail.smtp.auth: true
spring.mail.properties.mail.smtp.starttls.enable: true
spring.mail.properties.mail.smtp.starttls.required: true