Проблема с отправкой html электронной почты - PullRequest
1 голос
/ 11 марта 2020

Я создал небольшое приложение для пакетной обработки, которое будет считывать данные из файла и отправлять 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;

}

Моя работа. xml is

<?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>

Мое общее содержимое. 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>

STudent Processor:

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 Ответ

0 голосов
/ 11 марта 2020

Местоположение точки останова, которое вы указали, будет срабатывать только в том случае, если оно действительно отправит электронное письмо в 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;
    };
}
...