spring - 如何使用 Spring Batch 发送邮件
问题描述
我想在处理器之后发送邮件。这是我的步骤配置:
public Step remindByMail() {
return stepBuilderFactory
.get("remindByMail")
.<Customer, SimpleMailMessage> chunk(1)
.reader(getCustomerList())
.processor(new MailProcessor())
.writer(new SendMail())
.build();
}
public class MailProcessor implements ItemProcessor<Customer, SimpleMailMessage> {
private String from = "aaa@oku.com";
@Override
public SimpleMailMessage process(Customer customer) throws Exception {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo("duyetpt@oku.com");
message.setSubject("Welcome " + customer.getUsername());
message.setText(customer.getInfo());
return message;
}
}
public class SendMail implements ItemWriter<SimpleMailMessage> {
@Override
public void write(List<? extends SimpleMailMessage> messages) throws Exception {
messages.stream().forEach((message)->mailSender.send(message));
}
}
我已经在application.properties
文件中设置了这些属性,
spring.mail.default-encoding=UTF-8
spring.mail.protocol=smtp
spring.mail.host=195.179.79.52
spring.mail.port=25
spring.mail.username=admin
spring.mail.password=admin
spring.mail.properties.mail.smtp.auth=true
我的 pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-task</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
但是,我得到了错误:
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: No authentication mechanisms supported by both server and client
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:440)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:323)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:312)
.....
Caused by: javax.mail.AuthenticationFailedException: No authentication mechanisms supported by both server and client
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:880)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:780)
.....
使用 Spring Batch 发送邮件应该怎么做?
解决方案
这是我对您的错误消息的猜测-服务器和客户端都不支持 需要从您的配置中删除以下属性的身份验证机制。
spring.mail.username=admin
spring.mail.password=admin
spring.mail.properties.mail.smtp.auth=true
在 Spring Boot + Batch 中,我使用我组织的服务器发送电子邮件而没有这些属性,因为不需要用户名和密码,因为程序必须驻留在组织网络中,这是唯一的安全性。
如果有人尝试使用- gmail 、 yahoo 等,那将是完全不同的故事。
推荐阅读
- c++ - 使用 MPI Scatter 分布数字 - 错误
- c# - Windows8/win10 c++/c# : 有多个虚拟桌面同时处于活动状态
- angular - 对象可能是 BehaviourSubject 的“未定义”
- css - CSS - 移动设备的奇怪“放大”背景图片
- arrays - 我可以在 ruby 中有一个正则表达式数组吗?
- android - SQLite getwritableDatabase 返回 null
- java - 此生产者消费者的非法监视器状态异常?
- javascript - 如何在 C# 应用程序中显示 HTML 画布?
- angular - 在 Angular 中,如何检查相对路由是否处于活动状态?
- javascript - 使用赋值解构交换术语在函数内部不起作用