Spring Mail

想必大家在今天这个特殊的日子里,一定热血沸腾了一把。为上午的阅兵点70个赞!

进入Spring Mail的主题:

前后大概花了8个小时的时间来研究Spring封装的javaMail。本来觉得挺简单的应用,但是真正动手实现起来,出现各种各样不知所措的问题。

推荐几篇blog:

1. http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mail.html

2. http://obullxl.iteye.com/blog/703248

3. http://www.codejava.net/frameworks/spring/sending-e-mail-with-spring-mvc

论资料,当然首推Spring的官方文档(参考1)。清晰,简介。只是想动手实现时,发现文档里没有类Order的实现,在几经查看文档并试着拼凑出Order类的实现时,感觉太过浪费时间,想着自己大体实现mail的功能就行,没必要注重细节。可这是,碰到了参考3。 不得不感慨几句,不劳而获总是要付出代价的!

参考3中对Spring Mail的结构,实现等等,做了很清晰的概括+解释。而且也一步步build了一个Spring Mail实现。最后,还附上了源码!在Spring MVC框架下,实现邮件功能。

本人在这个的基础上做了小的改动(主要因为gmail在国内不能用。。。),而就是这个小的改动,给我整出来一个个不知所云的exception!

先把问题和原因总结一下:

1. Spring的版本问题

  提供的源码中Spring的版本是3.2..,自己用的jdk版本是1.8的。这两个版本不匹配,会造成加载xml文件时的错误。

2. 对JavaMailSenderImpl的配置问题

  由于源码中配置的是gmail,所以改成了163的。但是各个邮箱服务器的配置是有差异的。所以根据参考2里的说明,重新配置邮件服务器。但仍然出现让自己纠结了3个多小时的认证失败问题。修改javaMailProperties中的属性多次都无果。有人还说username只保留邮箱@符号的前部分,但尝试后仍然无果。最终认为自己163邮箱的smtp认证有问题吧。

3. 根据2的假想,想重新注册一个163邮箱试试。这个时候163又TMD恶心了我一把:需要下载客户端才能注册! 果断换注册sina邮箱了! 紧接着重新配置JavaMailSenderImpl。最后完成了邮件发送。

上代码 (以备后用):

Spring用4.0版本以上的。最好用Maven管理。

实验用的界面就是用的参考3的。

web.xml未改动

applicationContext.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:mvc="http://www.springframework.org/schema/mvc"
    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/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:annotation-config />
    <mvc:annotation-driven />
    <context:component-scan base-package="net.codejava.spring" />

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtp.email.com" />
        <property name="username" value="your_email_address" />
        <property name="password" value="******" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.timeout">30000</prop>
                <prop key="mail.debug">true</prop>
                <!-- <prop key="mail.smtp.starttls.enable">true</prop> -->

            </props>
        </property>
    </bean>

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>

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

class SendEmailController:

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/sendEmail.do")
public class SendEmailController {

    @Autowired
    private JavaMailSender mailSender;

    @RequestMapping(method = RequestMethod.POST)
    public String doSendEmail(HttpServletRequest request) {
        // takes input from e-mail form
        String sentFrom = "your_email_address";
        String recipientAddress = request.getParameter("recipient");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");

        // prints debug info
        System.out.println("To: " + recipientAddress);
        System.out.println("Subject: " + subject);
        System.out.println("Message: " + message);

        // creates a simple e-mail object
        SimpleMailMessage email = new SimpleMailMessage();
        email.setFrom(sentFrom);
        email.setTo(recipientAddress);
        email.setSubject(subject);
        email.setText(message);

        // sends the e-mail
        mailSender.send(email);

        // forwards to the view named "Result"
        return "Result";
    }
}

自己动手,丰衣足食!

时间: 2024-08-11 12:13:44

Spring Mail的相关文章

Spring Quartz结合Spring mail定期发送邮件

文件配置如下: <?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:context="http://www.springframework

通过Spring Mail Api发送邮件

使用Java Mail API来发送邮件也很容易实现,但是最近公司一个同事封装的邮件API实在让我无法接受,于是便打算改用Spring Mail API来发送邮件,顺便记录下这篇文章. [Spring Mail API] Spring Mail API都在org.springframework.mail及其子包org.springframework.mail.javamail中封装,且只提供了邮件发送的封装. SimpleMailMessage: 对邮件的一个简单封装,只能用于表示一个纯文本的邮

使用Spring Mail发送QQ邮件

一.邮箱设置 QQ邮箱设置:http://service.mail.qq.com/cgi-bin/help?id=28, 下面这些服务需要开启(需要设置邮箱独立密码): 二.applicationContext.xml配置 <bean id="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <!-- 主机(QQ的smtp服务器) --> <pro

使用Spring的JAVA Mail支持简化邮件发送(转)

闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类JavaMailSenderImpl,这个类是发送邮件的核心类.可以通过在配置文件中配置使用,当然也可以自己硬编码到代码中(方便起见,下面的演示代码都是硬编码到代码中,省得配置麻烦). Spring提供的邮件发送不仅支持简单邮件的发送.添加附件,而且还可

spring boot 加入mail邮件支持

一.添加依赖 <!-- 邮件整合 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 二.添加mail.properties配置文件 #设置邮箱主机 spring.mail.host=smtp.qq.com #设置用户名 spr

spring-boot实战【12】:Spring Boot中使用JavaMailSender发送邮件

相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件. 快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: 1 2 3 4 <dependency> <groupId>org.springframew

再谈Spring Boot中的乱码和编码问题

编码算不上一个大问题,即使你什么都不管,也有很大的可能你不会遇到任何问题,因为大部分框架都有默认的编码配置,有很多是UTF-8,那么遇到中文乱码的机会很低,所以很多人也忽视了. Spring系列产品大量运用在网站开发中,而Spring Boot是为了简化配置而出现的,理论上讲Spring Boot应该默认配置UTF-8为默认编码,但是网络上依然可以看到很多关于Spring Boot乱码的文章,大部分解决方案沿用Spring MVC的方案,自定义EncodingFilter. 但是仔细查看Spri

玩转spring boot——properties配置

前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连接,若有一处配错或遗漏,就会带来不可挽回的损失.正因为这样,spring boot给出了非常理想的解决方案——application.properties.见application-properties的官方文档:http://docs.spring.io/spring-boot/docs/curr

spring boot发送邮件

1.引入maven依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 2.配置文件 #JavaMailSender 邮件发送的配置 #spring.mail.host=smtp.qq.com spring.mail.host=smtp.16