Spring boot 发送html电子邮件时出现问题
我已经创建了一个小型spring批处理应用程序,它将从文件中读取数据并发送一封html电子邮件。StudentProcessor创建MImeMessage,ItemWriter发送电子邮件 该文件包含学生Id和学生姓名、母国城市、访问城市 学生详细信息POJO:Spring boot 发送html电子邮件时出现问题,spring-boot,spring-batch,mime-message,itemwriter,Spring Boot,Spring Batch,Mime Message,Itemwriter,我已经创建了一个小型spring批处理应用程序,它将从文件中读取数据并发送一封html电子邮件。StudentProcessor创建MImeMessage,ItemWriter发送电子邮件 该文件包含学生Id和学生姓名、母国城市、访问城市 学生详细信息POJO: 公共课堂学生详细信息{ 公共字符串getStudentId(){ 返回学生ID; } 公共字符串getName(){ 返回名称; } 公共void集合名(字符串名){ this.name=名称; } 公共字符串getHomeCity()
公共课堂学生详细信息{
公共字符串getStudentId(){
返回学生ID;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getHomeCity(){
返乡;
}
public void setHomeCity(字符串homeCity){
this.homeCity=homeCity;
}
公共字符串getVisitingCity(){
回访城市;
}
公共无效设置visitingCity(字符串visitingCity){
this.visitingCity=访问城市;
}
私人字符串学生ID;
私有字符串名称;
私人字符串家乡;
私人字符串访问城市;
}
我的job.xml是
我的common content.xml文件是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" id="jobRepository">
<property ref="transactionManager" name="transactionManager"/>
</bean>
<bean class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" id="transactionManager"/>
<bean class="org.springframework.batch.core.launch.support.SimpleJobLauncher" id="jobLauncher">
<property ref="jobRepository" name="jobRepository"/>
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="mailhost-arec.ch"/>
<property name="port" value="25"/>
</bean>
</beans>
学生处理器:
公共类StudentProcessor实现
项目处理器{
@凌驾
公共MIMessagePreparator流程(学生详细信息学生)
抛出异常{
MimeMessagePreparator msg=新的MimeMessagePreparator(){
@凌驾
public void prepare(MimeMessage MimeMessage)引发异常{
mimessage.setFrom(“noreply@abc.com");
mimessage.setRecipients(Message.RecipientType.TO,“nik。kard@gma.com");
setSubject(“欢迎消息!!”);
mimeMessage.setText(“Hello”+student.getName());
System.out.println(“Hello mime”);
System.out.println(mimessage.toString());
}
};
返回味精;
}
}
我在mimessagepreparator prepare函数中放置了一个调试器,但代码没有到达调试器。它只是跳过并转到“return msg”行;
因为没有生成消息。ItemWriter失败了。
我不确定这里的问题是什么。有人能告诉你吗?只有当它在
MimeMessageItemWriter
中实际发送电子邮件时,才会触发你设置的断点位置,它希望从ItemProcessor
的输出中接收MimeMessage
类型的对象,但现在你返回的是MimeMessagePreparator
。因此,它永远不会被执行,因为它没有收到正确的参数类型,因此断点永远不会被触发
因此,请从ItemProcessor
返回MimeMessage
:
@组件
公共类StudentProcessor实现ItemProcessor{
@自动连线
私有JavaMailSender JavaMailSender;
@凌驾
公共MIMessagePreparator进程(StudentDetails student)引发异常{
mimessage MimeMessage=javamailssender.createmimessage();
mimessage.setFrom(“noreply@abc.com");
mimessage.setRecipients(Message.RecipientType.TO,“nik。kard@gma.com");
setSubject(“欢迎消息!!”);
mimeMessage.setText(“Hello”+student.getName());
System.out.println(“Hello mime”);
返回mimeMessage;
};
}
只有当它在MimeMessageItemWriter
中实际发送电子邮件时,才会触发您放置的断点位置,该电子邮件希望从ItemProcessor
的输出接收类型为MimeMessage
的对象,但现在您返回的是MimeMessagePreparator
。因此,它永远不会被执行,因为它没有收到正确的参数类型,因此断点永远不会被触发
因此,请从ItemProcessor
返回MimeMessage
:
@组件
公共类StudentProcessor实现ItemProcessor{
@自动连线
私有JavaMailSender JavaMailSender;
@凌驾
公共MIMessagePreparator进程(StudentDetails student)引发异常{
mimessage MimeMessage=javamailssender.createmimessage();
mimessage.setFrom(“noreply@abc.com");
mimessage.setRecipients(Message.RecipientType.TO,“nik。kard@gma.com");
setSubject(“欢迎消息!!”);
mimeMessage.setText(“Hello”+student.getName());
System.out.println(“Hello mime”);
返回mimeMessage;
};
}
另一方面,我建议您在POJO中使用Lombok。节省生成所有getter和setter的时间。只需将其导入pom.xml中,并在pojo中使用@Data注释,我建议在pojo中使用Lombok。节省生成所有getter和setter的时间。只需将其导入pom.xml,并在pojo中使用@Data注释