- 编辑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>
- 创建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);
}
}
- 创建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;
}
- 创建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;
}
}
- 创建接口测试类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();
}
}
- 创建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}" /><!–邮件内容编码,防止发送中文出现乱码 –>-->
<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>
- 设置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等

收到邮件还是很开心的!!!!!!

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

被折叠的 条评论
为什么被折叠?



