第一个Maven项目-使用GreenMail发送邮件

本文档详细介绍了如何通过编辑POM文件、创建相关类和配置资源来构建一个Maven项目,利用GreenMail库发送邮件。首先更新了account-email的pom.xml,接着创建了AccountEmailException、AccountEmailService和其实现类AccountEmailServiceImpl。接着编写了接口测试类AccountEmailServiceTest。关键在于设置account-email.xml文件以配置邮箱服务器信息,并在service.properties文件中配置发件人的SMTP服务地址。确保发件人邮箱已启用SMTP服务后,即可成功发送邮件。
  1. 编辑account-email的pom文件
<?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>com.juvenxu.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>
        <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>
  1. 创建AccountEmailException类
    文件路径:src→main→java
package com.juvenxu.mvnbook.account.email;

public class AccountEmailException extends Exception{
//    private static final long serialVersionUID = -4817386460334501672L;
    public AccountEmailException(String message){
        super(message);
    }
    public AccountEmailException(String message,Throwable throwable){
        super(message,throwable);
    }
}
  1. 创建AccountEmailService类
    文件路径:src→main→java
package com.juvenxu.mvnbook.account.email;

public interface AccountEmailService {
//    /**
//     * 目的:用来发送HTML格式的邮件
//     *
//     * @param to       接收邮件的地址
//     * @param subject  邮件主题
//     * @param htmlText 邮件内容
//     * @throws AccountEmailException 如果发送邮件失败则抛出异常
//     */
   void sendMail(String to, String subject, String htmlText)
           throws AccountEmailException;
}
  1. 创建AccountEmailServiceImpl类
    文件路径:src→main→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 {
    private JavaMailSender javaMailSender;// 发送邮件的工具类,提供get、set方法,实现依赖注入

    private String systemEmail;

    public void sendMail(String to, String subject, String htmlText)
            throws AccountEmailException {
        try {
            MimeMessage msg = javaMailSender.createMimeMessage();// 将要发送的邮件
            MimeMessageHelper msgHelper = new MimeMessageHelper(msg);
           // MimeMessageHelper msgHelper = new MimeMessageHelper(msg,"UTF-8");

            msgHelper.setFrom(systemEmail);// 设置邮件的发送地址
            msgHelper.setTo("to");// 设置邮件收件地址,发送不成功这里可以先写死收件人邮箱
            msgHelper.setSubject(subject);// 设置邮件主题
            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;
    }

}
  1. 创建接口测试类AccountEmailServiceTest
    文件路径:src→main→test
package com.juvenxu.mvnbook.account.email;

import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.GreenMailUtil;
import com.icegreen.greenmail.util.ServerSetup;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.mail.Message;

import static junit.framework.Assert.assertEquals;

public class AccountEmailServiceTest {
    private GreenMail greenMail;

    @Before
    public  void startMailServer() throws Exception{
        greenMail=new GreenMail(ServerSetup.SMTP);
        greenMail.setUser("发件人邮箱","邮箱授权码");
        greenMail.start();
    }

    @Test
    public void testSendMail() throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("account-email.xml");
        AccountEmailService accountEmailService = (AccountEmailService) ctx.getBean("accountEmailService");
        String subject = "Test Subject";
        String htmlText = "<h3>Test1111</h3>";
        accountEmailService.sendMail("收件人邮箱", subject, htmlText);
        greenMail.waitForIncomingEmail(2000, 1);
        Message[] msgs = greenMail.getReceivedMessages();
        System.out.println(msgs[0].getContent().toString());

        assertEquals(1,msgs.length);
        assertEquals(subject,msgs[0].getSubject());
        assertEquals( htmlText, GreenMailUtil.getBody( msgs[0] ).trim() );
    }
    @After
    public void stopMailService() throws Exception{
        greenMail.stop();
    }
}
  1. 创建account-email.xml文件
    文件路径:src→main→resources,设置邮箱服务器配置信息,依赖注入到javaMailSender中
<?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">
    <!-- 配置载入属性文件的组件 -->
    <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="defaultEncoding" value="${email.defaultEncoding}" />&lt;!&ndash;邮件内容编码,防止发送中文出现乱码  &ndash;&gt;-->
        <property name="javaMailProperties">
            <props>
                <prop key="mail.${email.protocol}.auth">${email.auth}</prop><!--是否需要认证  -->
            </props>
        </property>
    </bean>
    <!--配置发送邮件的业务实现类,目的是注入 javaMailSenderImpl,设置发送邮件的系统邮件地址-->
    <bean id="accountEmailService"
          class="com.juvenxu.mvnbook.account.email.AccountEmailServiceImpl">
        <property name="javaMailSender" ref="javaMailSender" /><!-- 注入javaMailSenderImpl -->
        <property name="systemEmail" value="${email.systemEmail}" />
    </bean>
</beans>
  1. 设置service.properties文件
    文件路径:src→test→resources下(src→main→resources下也复制一份) ,其中host配置发件人邮箱协议地址
email.protocol=smtp
email.host=smtp.163.com
email.port=25
email.username=发件人邮箱地址
email.password=邮箱授权码
email.auth=false
email.systemEmail=发件人邮箱地址

备注:发件人邮箱一定要开启协议服务SMTP等
在这里插入图片描述

收到邮件还是很开心的!!!!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值