Content Table

Java 发邮件

可以使用 Apache Commons Mail 或者 Spring Mail 发送邮件。

Spring 项目中推荐使用 Spring Mail 发送邮件,非 Spring 项目里可以使用 Apache Commons Mail 发邮件 (需要的 Jar 包相对少一些)。

Apache Commons Mail

Gradle 依赖

1
2
3
compile('org.apache.commons:commons-email:1.4')
compile('javax.mail:'javax.mail-api:1.5.5')
compile('com.sun.mail:javax.mail:1.5.5')

发送邮件

1
2
3
4
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
1
2
3
4
5
6
7
8
9
10
11
12
13
public void sendCommonsMail() throws EmailException {
Email email = new SimpleEmail();
email.setHostName("smtp.mail.me.com");
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator("biao.mac@icloud.com", "***password***"));
// email.setSSLOnConnect(true);
email.setStartTLSEnabled(true);
email.setFrom("biao.mac@icloud.com");
email.addTo("biao.mac@qq.com");
email.setSubject("Commons Mail");
email.setMsg("This is a test mail ... :-)");
email.send();
}

这里的 SMTP 使用的是苹果的 CloudMail 的 SMTP
不同的 SMTP 配置不一样,具体要参考发送邮件服务的 SMTP 配置
更多例子请参考: https://commons.apache.org/proper/commons-email/userguide.html

Spring Mail

Gradle 依赖

1
2
3
4
5
compile('org.springframework:spring-context-support:4.3.0.RELEASE')
compile('javax.mail:'javax.mail-api:1.5.5')
compile('com.sun.mail:javax.mail:1.5.5')
testCompile('junit:junit:4.12')
testCompile('org.springframework:spring-test:4.3.0.RELEASE')

Spring Bean 配置: spring-mail.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.mail.me.com" />
<property name="port" value="587" />
<property name="username" value="biao.mac@icloud.com" />
<property name="password" value="***password***" />

<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>

<bean id="mailService" class="com.xtuer.service.MailService">
<property name="mailSender" ref="mailSender" />
</bean>
</beans>

这里的 SMTP 使用的是苹果的 CloudMail 的 SMTP
不同的 SMTP 配置不一样,具体要参考发送邮件服务的 SMTP 配置

MailService

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.xtuer.service;

import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

public class MailService {
private MailSender mailSender;

public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}

public void sendMail(String from, String to, String subject, String msg) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(msg);
mailSender.send(message);
}
}

发送邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import com.xtuer.service.MailService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@ContextConfiguration({"classpath:spring-mail.xml"})
public class TestMail {
@Resource(name="mailService")
private MailService mailService;

// 使用 Spring Mail 发送邮件
@Test
public void sendSpringMail() {
mailService.sendMail("biao.mac@icloud.com", "biao.mac@qq.com", "Spring Mail", "This is only for test!");
}