Ошибка создания бина с именем 'emailController' - PullRequest
0 голосов
/ 27 сентября 2018

Изображение ошибки, которую я получаю Здравствуйте, я новичок в отправке писем с помощью Spring MVC.Я беру контактную информацию из формы и хочу получать обновления по электронной почте каждый раз, когда новый контакт добавляется в базу данных контактов.все параметры формы работают, и я могу добавить их в базу данных, но при попытке сгенерировать электронное письмо для отправки я получаю сообщение об ошибке «Ошибка создания компонента».Кажется, это происходит только тогда, когда я добавляю @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 = "camwess1@gmail.com";

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 = "test@test.com";

    // 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="test@test.com" />
    <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, он возвращает исключение нулевого указателя, как если бы он генерировал объект для отправки электронного письма.

1 Ответ

0 голосов
/ 27 сентября 2018

Добавьте ниже зависимости в вашем 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>

STEP2: удалите ваши свойства почты в 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
...