Ошибка при создании bean-компонента с именем emailController

Я получаю изображение ошибки Привет, я новичок в отправке писем с помощью Spring MVC. Я беру контактную информацию из формы и хочу получать обновления по электронной почте каждый раз, когда новый контакт добавляется в базу данных контактов. ввод всех параметров формы работает, и я могу добавить их в базу данных, но при попытке сгенерировать электронное письмо для отправки я получаю сообщение об ошибке при создании исключения bean-компонента. Кажется, это происходит только тогда, когда я добавляю @Autowired к объекту JavaMailSender, который я создаю в своем контроллере. Если я не добавлю @Autowired, я получу исключение с нулевым указателем, вероятно, потому, что для отправителя почты не создается объект. Может ли кто-нибудь помочь мне, как это понять?

Я включаю код и файлы XML, чтобы, надеюсь, получить некоторое представление.

import java.util.List;

import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import co.clutch.contactform.dao.ContactDao;
import co.clutch.contactform.entity.Contact;

@Controller
public class ContactFormController {

static String emailToRecipient, emailSubject, emailMessage;
static final String emailFromRecipient = "[email protected]";

static ModelAndView modelViewObj;

@Autowired
private ContactDao contactDao;
@Autowired
private JavaMailSender mailSenderObj;

// Show contactForm
@RequestMapping("/")
public ModelAndView showContactForm() {
    ModelAndView mav = new ModelAndView("contact_form");

    return mav;

}



@RequestMapping("submitform/create/{contact}")
public ModelAndView submitContactForm(@RequestParam(value = "name") String 
contactName,
        @RequestParam(value = "number") String phoneNumer, 
@RequestParam(value = "email") String email,
        @RequestParam(value = "industry") String industry) {

    // Create new Contact Object
    Contact contact = new Contact(contactName, phoneNumer, email, industry);
    System.out.println(contact.toString());

    // Create contact in database
    contactDao.create(contact);

    List<Contact> contacts = contactDao.findAll();

    // email information

    // Reading Email Form Input Parameters
    emailSubject = "New Lead";
    emailMessage = "You have a new lead from " + contact.getContactName();
    emailToRecipient = "[email protected]";

    // Logging The Email Form Parameters For Debugging Purpose
    System.out.println("\nReceipient?= " + emailToRecipient + ", Subject?= " 
   + emailSubject + ", Message?= "
            + emailMessage + "\n");

    mailSenderObj.send(new MimeMessagePreparator() {
        public void prepare(MimeMessage mimeMessage) throws Exception {

            MimeMessageHelper mimeMsgHelperObj = new 
   MimeMessageHelper(mimeMessage, true, "UTF-8");
            mimeMsgHelperObj.setTo(emailToRecipient);
            mimeMsgHelperObj.setFrom(emailFromRecipient);
            mimeMsgHelperObj.setText(emailMessage);
            mimeMsgHelperObj.setSubject(emailSubject);

        }
    });

    System.out.println("\nMessage Send Successfully.... Hurrey!\n");

    ModelAndView mav = new ModelAndView("showcontacts", "contacts", 
contacts);

    return mav;

}

Вот файл app-servelet.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:p = "http://www.springframework.org/schema/p" 
xmlns:context = "http://www.springframework.org/schema/context" 
xsi:schemaLocation = "http://www.springframework.org/schema/beans               
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd               
http://www.springframework.org/schema/context               
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package = "com.jcg.spring.mvc.email" />

<!-- Spring Email Sender Bean Configuration -->
<bean id = "mailSender" 
class = "org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name = "host" value = "smtp.gmail.com" />
    <property name = "port" value = "587" />
    <property name = "username" value = "[email protected]" />
    <property name = "password" value = "password" />
    <property name = "javaMailProperties">
        <props>
            <prop key = "mail.smtp.auth">true</prop>
            <prop key = "mail.debug">true</prop>
            <prop key = "mail.transport.protocol">smtp</prop>
            <prop 
key = "mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
            <prop key = "mail.smtp.socketFactory.port">465</prop>
            <prop key = "mail.smtp.starttls.enable">true</prop>
        </props>
    </property>
</bean>

<!-- Spring Email Attachment Configuration -->
<bean id = "multipartResolver" 
class = "org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- Maximum Upload Size In Bytes -->
    <property name = "maxUploadSize" value = "20971520" />
    <!-- Maximum Size Of File In Memory (In Bytes) -->
    <property name = "maxInMemorySize" value = "1048576" />
</bean>

<!-- Resolves Views Selected For Rendering by @Controllers to *.jsp Resources 
in the /WEB-INF/ Folder -->
<bean 
class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name = "prefix" value = "/WEB-INF/views/" />
    <property name = "suffix" value = ".jsp" />
</bean>

<!-- Send Email Exception Resolver i.e. In Case Of Exception The Controller 
Will Navigate To 'error.jsp' & Will Display The Exception Message -->
<bean 

class = "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver
">
    <property name = "exceptionMappings">
        <props>
            <prop key = "java.lang.Exception">error</prop>
        </props>
    </property>
</bean> 

Вот копия моего файла web.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<web-app version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee" 
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee              
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Spring Mvc Email Example</display-name>

<!-- Spring Configuration - Processes Application Requests -->
<servlet>
    <servlet-name>SpringController</servlet-name>
    <servlet- 
class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>SpringController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>   

<!-- Welcome File List -->
<welcome-file-list>
    <welcome-file>contact_form.jsp</welcome-file>
</welcome-file-list>
</web-app>

Вот копия моих зависимостей

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>co.clutch</groupId>
<artifactId>contact-form</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>contact-form</name>
<description>Demo project for Spring Boot</description>
<url>http://maven.apache.org</url>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF- 
8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>

   <!-- All Mail Related Stuff + Much more -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
    <!-- Java Mail Dependency -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>
<build>
    <finalName>${project.artifactId}</finalName>
</build>
</project>

Я пытаюсь отправить электронное письмо после добавления объекта контакта в базу данных. Если я отключу @autowired, он вернет исключение с нулевым указателем, как если бы он генерировал объект для отправки электронной почты.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
913
1

Ответы 1

Добавьте ниже зависимость в свой pom и удалите другие, которые я определил ниже, должны работать

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

и удалите ниже:

<!-- Java Mail Dependency -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.5.5</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>

ШАГ 2: переместите свойства вашей почты в application.properties вместо xml сервлета.

spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.host=************
spring.mail.port=587
spring.mail.username=********************
spring.mail.password=*****************
spring.mail.protocol=smtp
spring.mail.defaultEncoding=UTF-8
spring.mail.smtp.auth=true

kj007 попытался добавить указанные ниже зависимости и удалить две зависимости почты Java, а также добавил ту, которую вы упомянули. Я все еще получаю те же ошибки. Я добавил несколько фотографий ошибок, которые получаю. Спасибо

Wesley 27.09.2018 20:53

Другие вопросы по теме