前言:当然,发 email 不一定要用 Spring,直接用 javax.mail 的API 就能实现。但是由于 Spring 提供了一个发送电子邮件的高级抽象层,
它向用户屏蔽了底层邮件系统的一些细节,同时负责低层次的代表客户端的资源处理。所以用 Spring 来发送 email 会省事很多和让发邮件变的简单许多。
Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender和封装了简单邮件属性的值对象SimpleMailMessage。

环境: 
Spring邮件服务:Maven + Spring SMTP MailSpring     2.5.6 
Spring邮件服务:Maven + Spring SMTP MailJavamail  1.4.4 
Spring邮件服务:Maven + Spring SMTP MailMaven     3.0.4 
Spring邮件服务:Maven + Spring SMTP MailMyeclipse 8.6.1

项目结构:
Spring邮件服务:Maven + Spring SMTP Mail

spring-smtp-mail.xml
Spring邮件服务:Maven + Spring SMTP Mail<beans xmlns=http://www.springframework.org/schema/beans  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Spring邮件服务:Maven + Spring SMTP Mail          xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
Spring邮件服务:Maven + Spring SMTP Mail  
Spring邮件服务:Maven + Spring SMTP Mail    
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
Spring邮件服务:Maven + Spring SMTP Mail        
<!-- 服务器 -->
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="host" value="smtp.yeah.net" />
Spring邮件服务:Maven + Spring SMTP Mail        
<!-- 端口号 -->
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="port" value="25" />
Spring邮件服务:Maven + Spring SMTP Mail        
<!-- 用户名 -->
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="username" value="[email protected]" />
Spring邮件服务:Maven + Spring SMTP Mail        
<!--  密码   -->
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="password" value="********" />
Spring邮件服务:Maven + Spring SMTP Mail        
<!-- SMTP服务器验证 -->
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="javaMailProperties">
Spring邮件服务:Maven + Spring SMTP Mail            
<props>
Spring邮件服务:Maven + Spring SMTP Mail                
<!-- 验证身份 -->
Spring邮件服务:Maven + Spring SMTP Mail                
<prop key="mail.smtp.auth">true</prop>
Spring邮件服务:Maven + Spring SMTP Mail           
</props>
Spring邮件服务:Maven + Spring SMTP Mail        
</property>
Spring邮件服务:Maven + Spring SMTP Mail    
</bean>
Spring邮件服务:Maven + Spring SMTP Mail    
<!-- 
Spring邮件服务:Maven + Spring SMTP Mail       目前我用过的EMAIL账号都是网易的,下面列出网易的SMTP服务器名和端口号:
Spring邮件服务:Maven + Spring SMTP Mail        网易邮箱          SMTP服务器     SMTP端口     POP3服务器       POP3端口
Spring邮件服务:Maven + Spring SMTP Mail        @126.com     smtp.126.com      25          pop3.126.com      110
Spring邮件服务:Maven + Spring SMTP Mail        @163.com     smtp.163.com      25          pop3.163.com      110
Spring邮件服务:Maven + Spring SMTP Mail        @yeah.net    smtp.yeah.net      25          pop3.yeah.net     110
Spring邮件服务:Maven + Spring SMTP Mail    
-->
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail    
<bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">
Spring邮件服务:Maven + Spring SMTP Mail        
<!-- 发件人email -->
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="from" value="[email protected]" />
Spring邮件服务:Maven + Spring SMTP Mail        
<!-- 
Spring邮件服务:Maven + Spring SMTP Mail         收件人email
Spring邮件服务:Maven + Spring SMTP Mail        <property name="to" value="[email protected]" />
Spring邮件服务:Maven + Spring SMTP Mail        email主题(标题)
Spring邮件服务:Maven + Spring SMTP Mail        <property name="subject" value="Subject" />
Spring邮件服务:Maven + Spring SMTP Mail        email主题内容
Spring邮件服务:Maven + Spring SMTP Mail        <property name="text">
Spring邮件服务:Maven + Spring SMTP Mail          <value>ContentText</value>
Spring邮件服务:Maven + Spring SMTP Mail        </property>
Spring邮件服务:Maven + Spring SMTP Mail        
-->
Spring邮件服务:Maven + Spring SMTP Mail    
</bean>
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail    
<bean id="simpleMail" class="com.fancy.util.Email">
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="mailSender" ref="mailSender" />
Spring邮件服务:Maven + Spring SMTP Mail        
<property name="simpleMailMessage" ref="simpleMailMessage" />
Spring邮件服务:Maven + Spring SMTP Mail    
</bean>
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail
</beans>

Email.java
Spring邮件服务:Maven + Spring SMTP Mailpackage com.fancy.util;
Spring邮件服务:Maven + Spring SMTP Mail
Spring邮件服务:Maven + Spring SMTP Mail
import org.springframework.mail.MailSender;
Spring邮件服务:Maven + Spring SMTP Mail
import org.springframework.mail.SimpleMailMessage;
Spring邮件服务:Maven + Spring SMTP Mail
/**
Spring邮件服务:Maven + Spring SMTP Mail * -----------------------------------------
Spring邮件服务:Maven + Spring SMTP Mail * @文件: Email.java
Spring邮件服务:Maven + Spring SMTP Mail * @作者: fancy
Spring邮件服务:Maven + Spring SMTP Mail * @邮箱: [email protected]
Spring邮件服务:Maven + Spring SMTP Mail * @时间: 2012-6-11
Spring邮件服务:Maven + Spring SMTP Mail * @描述: 发送Email工具类
Spring邮件服务:Maven + Spring SMTP Mail * -----------------------------------------
Spring邮件服务:Maven + Spring SMTP Mail 
*/

Spring邮件服务:Maven + Spring SMTP Mail
public class Email {
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail    
private MailSender mailSender;
Spring邮件服务:Maven + Spring SMTP Mail    
private SimpleMailMessage simpleMailMessage;
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail  
/**
Spring邮件服务:Maven + Spring SMTP Mail     * @方法名: sendMail 
Spring邮件服务:Maven + Spring SMTP Mail     * @参数名:
@param subject  邮件主题
Spring邮件服务:Maven + Spring SMTP Mail     * @参数名:
@param content 邮件主题内容
Spring邮件服务:Maven + Spring SMTP Mail     * @参数名:
@param to         收件人Email地址
Spring邮件服务:Maven + Spring SMTP Mail     * @描述语: 发送邮件
Spring邮件服务:Maven + Spring SMTP Mail     
*/

Spring邮件服务:Maven + Spring SMTP Mail    
public void sendMail(String subject, String content, String to) {
Spring邮件服务:Maven + Spring SMTP Mail        
Spring邮件服务:Maven + Spring SMTP Mail        simpleMailMessage.setSubject(subject); 
//设置邮件主题
Spring邮件服务:Maven + Spring SMTP Mail
        simpleMailMessage.setTo(to);             //设定收件人
Spring邮件服务:Maven + Spring SMTP Mail
        simpleMailMessage.setText(content);  //设置邮件主题内容
Spring邮件服务:Maven + Spring SMTP Mail
        mailSender.send(simpleMailMessage); //发送邮件
Spring邮件服务:Maven + Spring SMTP Mail
    }

Spring邮件服务:Maven + Spring SMTP Mail      
//Spring 依赖注入
Spring邮件服务:Maven + Spring SMTP Mail
    public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
Spring邮件服务:Maven + Spring SMTP Mail        
this.simpleMailMessage = simpleMailMessage;
Spring邮件服务:Maven + Spring SMTP Mail    }

Spring邮件服务:Maven + Spring SMTP Mail      
//Spring 依赖注入 
Spring邮件服务:Maven + Spring SMTP Mail
    public void setMailSender(MailSender mailSender) {
Spring邮件服务:Maven + Spring SMTP Mail        
this.mailSender = mailSender;
Spring邮件服务:Maven + Spring SMTP Mail    }

Spring邮件服务:Maven + Spring SMTP Mail}

Spring邮件服务:Maven + Spring SMTP Mail

Junit Test:EmailTest.java
Spring邮件服务:Maven + Spring SMTP Mailpackage com.fancy.test;
Spring邮件服务:Maven + Spring SMTP Mail
Spring邮件服务:Maven + Spring SMTP Mail
import junit.framework.TestCase;
Spring邮件服务:Maven + Spring SMTP Mail
import org.springframework.context.ApplicationContext;
Spring邮件服务:Maven + Spring SMTP Mail
import org.springframework.context.support.ClassPathXmlApplicationContext;
Spring邮件服务:Maven + Spring SMTP Mail
import com.fancy.util.Email;
Spring邮件服务:Maven + Spring SMTP Mail
/**
Spring邮件服务:Maven + Spring SMTP Mail * -----------------------------------------
Spring邮件服务:Maven + Spring SMTP Mail * @文件: EmailTest.java
Spring邮件服务:Maven + Spring SMTP Mail * @作者: fancy
Spring邮件服务:Maven + Spring SMTP Mail * @邮箱: [email protected]
Spring邮件服务:Maven + Spring SMTP Mail * @时间: 2012-6-11
Spring邮件服务:Maven + Spring SMTP Mail * @描述: Junit测试,运行将发送一封email
Spring邮件服务:Maven + Spring SMTP Mail * -----------------------------------------
Spring邮件服务:Maven + Spring SMTP Mail 
*/

Spring邮件服务:Maven + Spring SMTP Mail
public class EmailTest extends TestCase {
Spring邮件服务:Maven + Spring SMTP Mail
Spring邮件服务:Maven + Spring SMTP Mail    
public void testSendMail() {
Spring邮件服务:Maven + Spring SMTP Mail        ApplicationContext context 
= new ClassPathXmlApplicationContext("spring-smtp-mail.xml");
Spring邮件服务:Maven + Spring SMTP Mail        Email mail 
= (Email)context.getBean("simpleMail");
Spring邮件服务:Maven + Spring SMTP Mail        mail.sendMail(
"Spring SMTP Mail Subject""Spring SMTP Mail Text""[email protected]");
Spring邮件服务:Maven + Spring SMTP Mail        
//mail.sendMail("标题", "内容", "收件人邮箱");
Spring邮件服务:Maven + Spring SMTP Mail
    }

Spring邮件服务:Maven + Spring SMTP Mail
Spring邮件服务:Maven + Spring SMTP Mail}

Spring邮件服务:Maven + Spring SMTP Mail

EmailAppTest.java 也是一个测试类,跟 Junit 的 EmailTest.java 是几乎一样的,这里就不贴出来了,再来看下 Maven:

pom.xml
Spring邮件服务:Maven + Spring SMTP Mail<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Spring邮件服务:Maven + Spring SMTP Mail  xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
Spring邮件服务:Maven + Spring SMTP Mail  
<modelVersion>4.0.0</modelVersion>
Spring邮件服务:Maven + Spring SMTP Mail  
<groupId>com.fancy</groupId>
Spring邮件服务:Maven + Spring SMTP Mail  
<artifactId>spring-mail-example</artifactId>
Spring邮件服务:Maven + Spring SMTP Mail  
<version>1.0</version>
Spring邮件服务:Maven + Spring SMTP Mail  
<packaging>jar</packaging>
Spring邮件服务:Maven + Spring SMTP Mail  
<name>spring-mail-example</name>
Spring邮件服务:Maven + Spring SMTP Mail  
<url>http://maven.apache.org</url>
Spring邮件服务:Maven + Spring SMTP Mail  
<properties>
Spring邮件服务:Maven + Spring SMTP Mail    
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Spring邮件服务:Maven + Spring SMTP Mail  
</properties>
Spring邮件服务:Maven + Spring SMTP Mail
Spring邮件服务:Maven + Spring SMTP Mail  
<dependencies>
Spring邮件服务:Maven + Spring SMTP Mail  
Spring邮件服务:Maven + Spring SMTP Mail    
<!-- Spring framework -->
Spring邮件服务:Maven + Spring SMTP Mail    
<dependency>
Spring邮件服务:Maven + Spring SMTP Mail      
<groupId>org.springframework</groupId>
Spring邮件服务:Maven + Spring SMTP Mail      
<artifactId>spring</artifactId>
Spring邮件服务:Maven + Spring SMTP Mail      
<version>2.5.6</version>
Spring邮件服务:Maven + Spring SMTP Mail    
</dependency>
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail    
<!-- Javamail API -->
Spring邮件服务:Maven + Spring SMTP Mail    
<dependency>
Spring邮件服务:Maven + Spring SMTP Mail      
<groupId>javax.mail</groupId>
Spring邮件服务:Maven + Spring SMTP Mail      
<artifactId>mail</artifactId>
Spring邮件服务:Maven + Spring SMTP Mail      
<version>1.4.4</version>
Spring邮件服务:Maven + Spring SMTP Mail    
</dependency>
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail    
<dependency>
Spring邮件服务:Maven + Spring SMTP Mail      
<groupId>junit</groupId>
Spring邮件服务:Maven + Spring SMTP Mail      
<artifactId>junit</artifactId>
Spring邮件服务:Maven + Spring SMTP Mail      
<version>3.8.1</version>
Spring邮件服务:Maven + Spring SMTP Mail      
<scope>test</scope>
Spring邮件服务:Maven + Spring SMTP Mail    
</dependency>
Spring邮件服务:Maven + Spring SMTP Mail    
Spring邮件服务:Maven + Spring SMTP Mail  
</dependencies>
Spring邮件服务:Maven + Spring SMTP Mail
</project>
Spring邮件服务:Maven + Spring SMTP Mail

Run 一下 EmailTest.java,稍等一会就能收到一封 Email

Spring邮件服务:Maven + Spring SMTP Mail

Spring邮件服务:Maven + Spring SMTP Mail


OK,邮件发送成功。另外,在用网易邮箱测试的时候,发现不进行 SMTP验证 邮件也能发送成功,曾在 Shopxx 中提到,
如果是 Gmail 就必须配置SMTP服务器验证,否则抛出异常,发送会失败。

相关文章:

  • 2021-05-26
  • 2021-12-02
  • 2021-09-07
  • 2021-10-05
  • 2022-12-23
  • 2021-12-14
  • 2022-03-08
猜你喜欢
  • 2021-11-27
  • 2021-08-11
  • 2021-11-27
  • 2021-12-07
  • 2022-01-14
  • 2022-01-18
  • 2022-01-04
相关资源
相似解决方案