Spring boot 发送html电子邮件时出现问题

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()

我已经创建了一个小型spring批处理应用程序,它将从文件中读取数据并发送一封html电子邮件。StudentProcessor创建MImeMessage,ItemWriter发送电子邮件 该文件包含学生Id和学生姓名、母国城市、访问城市 学生详细信息POJO:

公共课堂学生详细信息{
公共字符串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注释