Проблема с отправкой 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;
    };
}
Другие вопросы по тегам