文档章节

GreenMail邮件测试服务器

JackieYeah
 JackieYeah
发布于 2016/04/11 20:01
字数 994
阅读 53
收藏 0
点赞 1
评论 0
1、GreenMail简介 
       GreenMail是一个用于测试的、开源的、直观的和易于使用的邮件服务器测试套件。它支持 SMTP、POP3、IMAP 等。它还为JBoss提供GreenMail服务。
        GreenMail是第一个并且是唯一的一个为从Java 接收 和检索 电子邮件 提供 测试框架的库 。主页:http://www.icegreen.com/greenmail/。

2、GreenMail在实际项目中的使用
      (1)项目的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jackie.codeproject.account</groupId>
<artifactId>account-email</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>account-email</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.2.2.RELEASE</spring.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
    </project>
    (2) 邮件发送接口:
    /*
     * Copyright 2013-2015
     */
    package com.jackie.codeproject.account.email;

/**
  * Title: AccountEmailService.java
  *  邮件接口
  * 
  * @author jackie
  * @since Mar 30, 2013 5:58:07 PM
  * @version V1.0
  */
public interface AccountEmailService {

    /**
      * 发送邮件方法
      * @author jackie  
      * @date Mar 30, 2013
      * @param to
      * @param subject
      * @param htmlText
      * @throws Exception    
      * @return void   
      */
    void sendEmail(String to, String subject, String htmlText) throws AccountEmailException;
}
 (2) 邮件发送接口实现类:
/*
 * Copyright 2013-2015
 */
package com.jackie.codeproject.account.email;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

/**
  * Title: AccountEmailServiceImpl.java
  *  邮件发送的实现类
  * 
  * @author jackie
  * @since Mar 30, 2013 6:11:40 PM
  * @version V1.0
  */
public class AccountEmailServiceImpl implements AccountEmailService {

    /**
      * @Fields javaMailSender : 简化邮件发送的工具类
      */
    private JavaMailSender javaMailSender;

    /**
      * @Fields systemEmail : 系统邮箱账号
      */
    private String systemEmail;

    public void sendEmail(String to, String subject, String htmlText) throws AccountEmailException{
        try {
            // 使用javaMailSender创建一个MimeMessage msg,对应了将要发送的邮件
            MimeMessage msg = javaMailSender.createMimeMessage();
            // 通过MimeMessage创建一个MimeMessageHelper msgHelper
            MimeMessageHelper msgHelper = new MimeMessageHelper(msg);
            // 使用MimeMessageHelper设置邮件的发送地址、收件地址、主题以及内容
            msgHelper.setFrom(systemEmail);
            msgHelper.setTo(to);
            msgHelper.setSubject(subject);
            msgHelper.setText(htmlText, true);
            // 发送邮件
            javaMailSender.send(msg);
        } catch (MessagingException e) {
            throw new AccountEmailException("Failed to send email.", e);
        }
    }

    /**
     * @return the javaMailSender
     */
    public JavaMailSender getJavaMailSender() {
        return javaMailSender;
    }

    /**
     * @param javaMailSender
     *            the javaMailSender to set
     */
    public void setJavaMailSender(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    /**
     * @return the systemEmail
     */
    public String getSystemEmail() {
        return systemEmail;
    }

    /**
     * @param systemEmail
     *            the systemEmail to set
     */
    public void setSystemEmail(String systemEmail) {
        this.systemEmail = systemEmail;
    }
}

(4)自定义异常类:
/*
 * Copyright 2013-2015
 */
package com.jackie.codeproject.account.email;

/**
 * Title: AccountEmailException.java 自定义邮件异常
 * 
 * @author jackie
 * @since Mar 30, 2013 6:01:31 PM
 * @version V1.0
 */
public class AccountEmailException extends Exception {

    /**
     * @Fields serialVersionUID
     */
    private static final long serialVersionUID = -5399025975888079256L;

    /**
     * 错误消息
     */
    private String message;

    public AccountEmailException(String message) {
        this.message = message;
    }

    public AccountEmailException(String message, Throwable throwable) {
        super(message, throwable);
    }

    /**
     * @return the message
     */
    public String getMessage() {
        return message;
    }

    /**
     * @param message
     *            the message to set
     */
    public void setMessage(String message) {
        this.message = message;
    }
}
(5)Spring配置文件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-3.2.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:email.properties"></property>
</bean>

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="protocol" value="${email.protocol}"></property>
<property name="host" value="${email.host}"></property>
<property name="port" value="${email.port}"></property>
<property name="username" value="${email.username}"></property>
<property name="password" value="${email.password}"></property>
<property name="javaMailProperties">
<props>
<prop key="mail.${email.protocol}.auth">${email.auth}</prop>
</props>
</property>
</bean>

<bean id="accountEmailService" class="com.jackie.codeproject.account.email.AccountEmailServiceImpl">
<property name="javaMailSender" ref="javaMailSender">
</property>
<property name="systemEmail" value="${email.systemEmail}"></property>
</bean>
</beans>
(6)属性文件email.properties:
#协议
email.protocol=smtp
#服务器
email.host=localhost
#端口
email.port=25
#用户名
email.username=test@gmail.com
#密码
email.password=123456
#服务器需要用户名和密码进行认证
email.auth=true
#系统邮箱
email.systemEmail=jackie@sina.com
(7)测试类:
/*
 * Copyright 2013-2015
 */
package com.jackie.codeproject.account.email;

import static org.junit.Assert.*;

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;

/**
 * Title: AccountEmailServiceTest.java 邮件服务测试类
 * 
 * @author jackie
 * @since Mar 30, 2013 6:13:14 PM
 * @version V1.0
 */
public class AccountEmailServiceTest {

    private GreenMail greenMail;

    private ApplicationContext applicationContext;

    /**
     * 启动邮件服务器
     * 
     * @author jackie
     * @date Mar 30, 2013
     * @throws Exception
     * @return void
     */
    @Before
    public void setUp() throws Exception {
        greenMail = new GreenMail(ServerSetup.SMTP);
        greenMail.setUser("test@gmail.com", "123456");
        greenMail.start();
    }

    /**
     * Test method for
     * {@link com.jackie.codeproject.account.email.AccountEmailService#sendEmail(java.lang.String, java.lang.String, java.lang.String)}
     * 
     */
    @Test
    public void testSendEmail() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("account-email.xml");
        AccountEmailService accountEmailService = (AccountEmailService) applicationContext.getBean("accountEmailService");
        String subject = "Test Subject";
        String htmlText = "<h3> Test </h3>";

        accountEmailService.sendEmail("test2@gmail.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());
    }

    /**
     * 关闭邮件服务器
     * 
     * @author jackie
     * @date Mar 30, 2013
     * @throws Exception
     * @return void
     */
    @After
    public void tearDown() throws Exception {
        greenMail.stop();
    }
}



© 著作权归作者所有

共有 人打赏支持
JackieYeah
粉丝 44
博文 70
码字总数 90004
作品 0
武汉
程序员
第五章 坐标和依赖

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

浣雨笑笑生
2015/09/18
63
1
Greenmail配置上的一点小问题

email.protocol=smtps email.host=smtp.gmail.com email.port=465 email.username=***@gmail.com email.password=*** email.auth=true email.systemEmail=***@qq.com 我学maven的时候遇到gre......

巴顿
2012/10/07
493
1
showcase用maven打包,greenmail打不进去

很奇怪,直接将showcase变成eclipse工程,然后导入eclipse,进行打包 在package窗口下,能看到maven依赖中,有greenmail包,但是打包生成到WEB-INF下的lib中时,就找不到了,除了这一个包,其...

高达
2013/03/25
215
1
icegreen在maven pom文件中配置报错

在 maven pom 中配置 com.icegreen greenmail 1.3.1b test 报错,一直显示:Missing artifact com.icegreen:greenmail:jar:1.3.1b 什么yuany...

zhangtong9
2017/03/16
48
0
转载:Java程序员常用工具类库 - 目录

有人说当你开始学习Java的时候,你就走上了一条不归路,在Java世界里,包罗万象,从J2SE,J2ME,J2EE三大平台,到J2EE中的13中核心技术,再到Java世界中万紫千红的Framework......等等,你会发...

hxf10047
2015/12/23
66
0
Maven依赖管理

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

zh119893
2014/08/28
232
0
sudo mvn提示sudo: mvn: command not found

我把maven安装在了~/apache-maven-3.0.4 在/etc/profile.d/maven.sh中配置如下: M2_HOME=/home/yyh/apache-maven-3.0.4export M2_HOMEexport PATH=$PATH:$M2_HOME/bin 执行mvn -v没什么问题,......

yanchao90
2012/12/17
12.5K
1
Exchange Server 2010 LAB Part5.公网的邮件收发

互联网上两个邮件服务器之间实现邮件收发的过程是由发件人将邮件发送到发件方邮件服务器队列中,由服务器去跟收件方服务器连接,连接成功后将邮件传送给收件人服务器,收件人服务器将根据接收...

XuTonglin
06/26
0
0
Exchange Server 2010 LAB Part 10.边缘传输服务器负载均衡

Exchange 2010边缘传输服务器的负载均衡: 在边缘传输服务器之间对入站的Internet邮件进行负载均衡。 1.默认情况下,边缘传输服务器跟集线器传输服务器一样,无需部署负载平衡解决方案即可将...

XuTonglin
06/26
0
0
lianglongqun/mock-mail-server

#mock-mail-server 模拟邮件服务器,用来方便测试发邮件功能。 测试时,业务系统通过http协议发邮件到模拟邮件服务器,不再发送到真实的邮件服务器。 方便查看他人收到的邮件,而不用担心帐号...

lianglongqun
2017/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
16分钟前
0
0
http状态码与ajax的状态值

ajax状态值 1.1 200 & OK:状态请求成功

litCabbage
19分钟前
0
0
iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面EmptyView 沙盒文件浏览与分享调试控...

sunnyaigd
22分钟前
0
0
AngularJS配置.run()块中设置路由事件的监听器以及过滤未经授权的请求

AngularJS中的run方法初始化全局数据,只对全局作用域起作用,如$rootScope.多个控制器之间可以共享数据,如下代码所示: <script type="text/javascript"> var m1 = angular....

孟飞阳
22分钟前
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
32分钟前
1
0
基于阿里出得ng-Alain搭建后台管理系统

首先跟大家介绍一下ng_Alain(阿里团队出品) ng-alain技术栈基于 Typescript、Angular、g2、@delon 和 ng-zorro-antd,提前了解和学习这些知识会非常有帮助。 ng-alain 脚手架是基于 Angular ...

方宏春
36分钟前
1
0
Spring框架IOC和AOP的实现原理

一、IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转...

HaierBrother
38分钟前
1
0
C++模版编程实现Haskell的函数模式匹配特性[图]

C++模版编程实现Haskell的函数模式匹配特性[图]: 大神 Bartosz Milewski 在2009年写了一篇文章《What Does Haskell Have to Do with C++?》,使用C++实现Haskell函数式编程语言的一些特性。...

原创小博客
39分钟前
1
0
${value}

1、就算 mapper 里面配置的名称是configSql ,在xml 里面配置的时候要注意 报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflectio......

职业搬砖20年
45分钟前
1
0
Xamarin 学习笔记 - Layout(布局)

本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1227733/Xamarin-Notes-Xamarin-Forms-Layouts 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案...

葡萄城技术团队
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部