文档章节

Maven实战 实例学习 account-email

第五郎
 第五郎
发布于 2014/06/09 17:15
字数 810
阅读 41
收藏 0
点赞 0
评论 0

项目结构

该部分为email模块,负责发送账号激活的电子邮件

account-email的POM文件

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.juven.mvnbook.account</groupId>
    <artifactId>account-email</artifactId>
    <name>Account Email</name>
    <version>1.0.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>2.5.6</version>
        </dependency>
        <!--实现邮件发送的依赖-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
        <!--GreenMail是开源的邮件服务测试套件,account-email模块使用该套件来测试邮件的发送。-->
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.3.1b</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!--开启Java 5的支持-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

AccountEmailService.java

package com.juvenxu.mvnbook.account.email;
public interface AccountEmailService
{
    //发送html格式的邮件,to为接收地址,subject为邮件主题,htmlText为邮件内容,如果发送邮件出错,
    //则抛出AccountEmailException异常
    void sendMail( String to, String subject, String htmlText )
        throws AccountEmailException;
}

AccountEmailServiceImpl.java

package com.juvenxu.mvnbook.account.email;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class AccountEmailServiceImpl
    implements AccountEmailService
{
    //来自于Spring Framework的帮助简化邮件发送的工具类型,对应该字段有一组getter()和setter()
    //方法,用来帮助实现依赖注入
    private JavaMailSender javaMailSender;
    private String systemEmail;
    public void sendMail( String to, String subject, String htmlText )
        throws AccountEmailException
    {
        try
        {
            //邮件服务器配置信息通过外部的配置注入到javaMailSender中
            //创建一个MimeMessage,对应了将要发送的邮件
            MimeMessage msg = javaMailSender.createMimeMessage();
            //用于设置该邮件的发送地址、收件地址、主题以及内容
            MimeMessageHelper msgHelper = new MimeMessageHelper( msg );
            msgHelper.setFrom( systemEmail );
            msgHelper.setTo( to );
            msgHelper.setSubject( subject );
            //true表示邮件的内容为html格式
            msgHelper.setText( htmlText, true );
            //发送邮件
            javaMailSender.send( msg );
        }
        catch ( MessagingException e )
        {
            throw new AccountEmailException( "Faild to send mail.", e );
        }
    }
    public JavaMailSender getJavaMailSender()
    {
        return javaMailSender;
    }
    public void setJavaMailSender( JavaMailSender javaMailSender )
    {
        this.javaMailSender = javaMailSender;
    }
    public String getSystemEmail()
    {
        return systemEmail;
    }
    public void setSystemEmail( String systemEmail )
    {
        this.systemEmail = systemEmail;
    }
}

account-email.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-2.5.xsd">
    <!--帮助载入properties文件的组件-->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:service.properties" />
    </bean>
    <!--定义邮件服务器的一些配置、包括协议、端口、主机、用户名、密码,是否需要认证等属性-->
    <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="protocol" value="${email.protocol}" />
        <property name="host" value="${email.host}" />
        <property name="port" value="${email.port}" />
        <property name="username" value="${email.username}" />
        <property name="password" value="${email.password}" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.${email.protocol}.auth">${email.auth}</prop>
            </props>
        </property>
    </bean>
    <!--注入javaMaiilSender-->
    <bean id="accountEmailService"
        class="com.juvenxu.mvnbook.account.email.AccountEmailServiceImpl">
        <property name="javaMailSender" ref="javaMailSender" />
        <property name="systemEmail" value="${email.systemEmail}" />
    </bean>
</beans>

account-email的测试代码

AccountEmailServiceTest.java
package com.juvenxu.mvnbook.account.email;
import static junit.framework.Assert.assertEquals;
import javax.mail.Message;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.GreenMailUtil;
import com.icegreen.greenmail.util.ServerSetup;
public class AccountEmailServiceTest{
    private GreenMail greenMail;
    //在测试方法之前执行,启动邮件服务器
    @Before
    public void startMailServer()
        throws Exception    {
        greenMail = new GreenMail( ServerSetup.SMTP );
        greenMail.setUser( "test@juvenxu.com", "123456" );
        greenMail.start();
    }
    @Test
    public void testSendMail()
        throws Exception    {
        //根据classpath路径中account-email.xml配置创建ApplicationContext
        ApplicationContext ctx = new ClassPathXmlApplicationContext( "account-email.xml" );
        AccountEmailService accountEmailService = 
            (AccountEmailService) ctx.getBean( "accountEmailService" );
        String subject = "Test Subject";
        String htmlText = "<h3>Test</h3>";
        accountEmailService.sendMail( "test2@juvenxu.com", subject, htmlText );
        greenMail.waitForIncomingEmail( 2000, 1 );
        Message[] msgs = greenMail.getReceivedMessages();
        assertEquals( 1, msgs.length );
        assertEquals( subject, msgs[0].getSubject() );
        assertEquals( htmlText, GreenMailUtil.getBody( msgs[0] ).trim() );
    }
    //在测试方法时候执行,关闭邮件服务器
    @After
    public void stopMailServer()
        throws Exception    {
        greenMail.stop();
    }}


© 著作权归作者所有

共有 人打赏支持
第五郎
粉丝 9
博文 52
码字总数 28473
作品 0
南京
程序员
第八章 聚合与继承

  Maven聚合:当我们的模块非常多的时候,我们想要一次构建多个项目,而不是到多个模块的目录下分别执行命令。Maven的聚合特性就是为该需求服务的。  为了能够使用一条命令就能构建 acco...

浣雨笑笑生
2015/09/23
86
0
maven聚合和继承

Maven聚合与继承 一、聚合 为了能够使用一条命令就能构建 account-email和 account-persist两个模块,我们需要建立一个额外的名为 account-aggregator的模块,然后通过该模块构建整个项目的所...

泡海椒
2016/02/29
29
0
Maven聚合与继承

Maven聚合与继承 一、聚合 为了能够使用一条命令就能构建 account-email和 account-persist两个模块,我们需要建立一个额外的名为 account-aggregator的模块,然后通过该模块构建整个项目的所...

zh119893
2014/08/28
396
0
第五章 坐标和依赖

  Maven的世界中拥有数量庞大的构件,也就是平常用的jar、war包,就像在三维坐标系中一个坐标值(x,y,z)可以唯一的确定一个点的位置信息,Maven中的构件也需要一个坐标来标识它们。在我们...

浣雨笑笑生
2015/09/18
63
1
Maven依赖管理

Maven提供dependencyManagement 元素既能让子模块继承到父模块的依赖配置,又能保证自模块依赖的使用灵活性。(有选择的继承) 可在accout-parent 中加入: <project xmlnsxmlns="http://ma...

zh119893
2014/08/28
232
0
spring+springMVC+mybatis的框架项目基础环境搭建

上一个项目在后台用到spring+springMVC+mybatis的框架,先新项目初步需求也已经下来,不出意外的话,应该也是用这个框架组合。 虽然在之前activiti相关的学习中所用到的框架也是这个,但是当...

涂宗勋
2016/04/14
543
0
activeMQ使用入门(点对点消息)

首先创建一个maven工程,在pom文件中增加相关的依赖包,如下: <dependency> <groupId>javax.jms</groupId> <artifactId>jms-api</artifactId> <version>1.1-rev-1</version> </dependency> ......

z_jordon
2015/05/26
0
0
Gson详解:Java对象与JSON相互转换的利器

Gson是什么(What is Gson) Gson是一个开源的Java库,用于任意Java对象与JSON之间的相互转换,由Google开发维护。 Gson的优势: 简单易用:以和两个方法为核心 不需要annotations的支持,可...

大鱼BIG_FISH
2015/12/16
560
0
Maven实战读书笔记(10)

account-captcha的POM配置 <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......

祥林会跟你远走高飞
2014/12/17
0
0
Activiti快速入门--kft-activiti-demo

1.项目简介 1.1 项目信息 本项目旨在让Activiti初学者可以快速入门,使用工作流里面的请假流程作为Activiti企业实战的Hello World。 简单通过这个实例说明如何结合流程与业务,表单、业务、流...

咖啡兔
2012/12/16
62.7K
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git GUI Client

Git GUI Client

qwfys
5分钟前
0
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
9分钟前
2
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
15分钟前
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
29分钟前
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 #!/usr/bin/expectset passwd "123456"spawn rsync -av root@192.168.133.132:/tmp/12.txt /tmp/expect {"yes...

lyy549745
30分钟前
0
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
38分钟前
0
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
42分钟前
1
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
0
0
nginx负载均衡

一、nginx 负载均衡 拓扑图: 主机信息: 1、负载均衡器1(lb1):192.168.10.205 RHEL7.5 2、负载均衡器2(lb2):192.168.10.206 RHEL7.5 3、web服务器1(web01):192.168.10.207 Centos...

人在艹木中
昨天
0
0
做了一个小网站

做了一个小网站 www.kanxs123.com

叶落花开
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部