Проблема с отправкой HTML-письма
Я создал небольшое весеннее пакетное приложение, которое будет читать данные из файла и отправлять электронное письмо в формате html. StudentProcessor создает MImeMessage, и ItemWriter отправляет электронное письмо. Файл содержит идентификатор и имя студента, родной город, город посещения StudentDetails POJO:
public class StudentDetails {
public String getStudentId() {
return studentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHomeCity() {
return homeCity;
}
public void setHomeCity(String homeCity) {
this.homeCity = homeCity;
}
public String getVisitingCity() {
return visitingCity;
}
public void setVisitingCity(String visitingCity) {
this.visitingCity = visitingCity;
}
private String studentId;
private String name;
private String homeCity;
private String visitingCity;
}
Мой файл job.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" xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd">
<bean id="studentDetails" class="com.ubs.classfiercompositeWriter.StudentDetails" scope="prototype" />
<import resource = "context.xml" />
<import resource = "database.xml" />
<job id="classifiercompositeWriter" xmlns="http://www.springframework.org/schema/batch">
<step id="step1">
<tasklet>
<chunk reader="cvsFileItemReader" processor="StudentEmailRowMapper" writer="feedStatusItemWriter"
commit-interval="1" >
</chunk>
</tasklet>
</step>
</job>
<bean id="cvsFileItemReader"
class="org.beanio.spring.BeanIOFlatFileItemReader"
scope="step">
<property name="streamMapping" value="classpath:/record-mapping.xml"></property>
<property name="streamName" value="dataFile"></property>
<property name="resource" value="file:C:/ABC/src/main/resources/data/input.csv"></property>
</bean>
<bean id="StudentEmailRowMapper" class="com.ubs.classfiercompositeWriter.StudentProcessor"></bean>
<bean id="feedStatusItemWriter"
class="org.springframework.batch.item.mail.javamail.MimeMessageItemWriter">
<property name="javaMailSender" ref="mailSender" />
</bean>
</beans>
Мой общий файл 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>
Студенческий процессор:
public class StudentProcessor implements
ItemProcessor<StudentDetails, MimeMessagePreparator> {
@Override
public MimeMessagePreparator process(StudentDetails student)
throws Exception {
MimeMessagePreparator msg = new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage mimeMessage) throws Exception {
mimeMessage.setFrom("noreply@abc.com");
mimeMessage.setRecipients(Message.RecipientType.TO,"nik.kard@gma.com");
mimeMessage.setSubject("Welcome message !!");
mimeMessage.setText("Hello " + student.getName());
System.out.println("Hello mime");
System.out.println(mimeMessage.toString());
}
};
return msg;
}
}
Я поместил отладчик в функцию подготовки MimeMessagePreparator, но код не доходит до отладчика. Он просто пропускает и переходит к строке "return msg"; Поскольку сообщение не создается. ItemWriter не работает. Я не уверен, в чем проблема. Кто-нибудь может посоветовать?
1 ответ
Местоположение точки останова, которое вы указали, сработает только тогда, когда оно действительно отправит электронное письмо в MimeMessageItemWriter
который ожидает получить объект в виде MimeMessage
от выхода ItemProcessor
но теперь вы возвращаете MimeMessagePreparator
. Таким образом, он никогда не будет выполнен, поскольку он не получает правильный тип аргумента, и, следовательно, точка останова никогда не будет запущена.
Так что верните MimeMessage
из ItemProcessor
пожалуйста:
@Component
public class StudentProcessor implements ItemProcessor<StudentDetails, MimeMessagePreparator> {
@Autowired
private JavaMailSender javaMailSender;
@Override
public MimeMessagePreparator process(StudentDetails student) throws Exception {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
mimeMessage.setFrom("noreply@abc.com");
mimeMessage.setRecipients(Message.RecipientType.TO,"nik.kard@gma.com");
mimeMessage.setSubject("Welcome message !!");
mimeMessage.setText("Hello " + student.getName());
System.out.println("Hello mime");
return mimeMessage;
};
}