文档章节

Maven实战 实例学习 account-email

第五郎
 第五郎
发布于 2014/06/09 17:15
字数 810
阅读 46
收藏 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();
    }}


© 著作权归作者所有

共有 人打赏支持
第五郎
粉丝 10
博文 53
码字总数 28957
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

day179-2018-12-16-英语流利阅读-待学习

《海王》:上映 7 天,票房突破 9 亿,DC 要翻身? Daniel 2018-12-16 1.今日导读 这部电影堪称“有《阿凡达》般的视觉奇观,《指环王》般的史诗质感,《夺宝奇兵》般的寻宝历险,《狮子王》...

飞鱼说编程
13分钟前
5
0
window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
28分钟前
5
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
50分钟前
3
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
21
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部