繁体   English   中英

创建名称为'emailController'的bean时出错

[英]Error creating bean with name '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 = "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,它将返回一个空指针异常,就好像它正在生成用于发送电子邮件的对象一样。

在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中,而不是servlet 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM