详细Spring如何进行邮件发送
本文由乐字节Java架构课程独家赞助播出

环境准备

创建 Maven 项目,在 pom.xml 文件中添加依赖

<!-- spring核心 jar 依赖 --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-context</artifactId>    <version>5.2.4.RELEASE</version></dependency><!--spring 上下文环境 支持--><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-context-support</artifactId>    <version>5.2.4.RELEASE</version></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-test</artifactId>    <version>5.2.4.RELEASE</version>    <scope>test</scope></dependency><!-- Java Mail坐标依赖 --><dependency>    <groupId>com.sun.mail</groupId>    <artifactId>javax.mail</artifactId>    <version>1.6.2</version></dependency>

配置邮件发送 bean

在 spring.xml 配置文件中设置邮件发送对应的bean标签

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">    <!-- 开启自动化扫描  -->    <context:component-scan base-package="com.xxxx"/>    <!-- 邮件发送器(提供了邮件发送接口、透明创建Java Mail的MimeMessage、及邮件发送的配置) -->    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">        <property name="host" value="smtp.163.com" />        <property name="port" value="25" />        <property name="defaultEncoding" value="utf-8"></property>        <property name="username" value="用户名"></property>        <property name="password" value="密码"></property>    </bean>    <!-- 普通文本邮件对象 -->    <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">        <property name="from" value="发件人的邮箱地址" />        <property name="subject" value="spring_mail" />    </bean></beans>

定义接口与实现类

定义接口

package com.xxxx.springMail;/** * 定义接口 */public interface OrderManager {    void placeOrder();}

定义实现类

package com.xxxx.springMail;import org.springframework.mail.MailException;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSenderImpl;import org.springframework.stereotype.Service;import javax.annotation.Resource;@Servicepublic class SimpleOrderManager implements OrderManager {    @Resource    private JavaMailSenderImpl mailSender;    @Resource    private SimpleMailMessage templateMessage;    @Override    public void placeOrder() {        // 获取邮件对象        SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage);        // 设置邮件收件人的邮箱地址        msg.setTo("收件人的邮箱地址");        // 设置邮件内容        msg.setText("Hello Spring Mail");        try{            // 发送邮件            this.mailSender.send(msg);        } catch (MailException ex) {            System.err.println(ex.getMessage());        }    }}

邮件发送测试

/**  *  发送邮件  * @param args  */public static void main(String[] args) {    ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");    SimpleOrderManager simpleOrderManager =         (SimpleOrderManager) ac.getBean("simpleOrderManager");    simpleOrderManager.placeOrder();}

发送附件

/**  *  发送包含附件的邮件  * @param args  * @throws MessagingException  */public static void main(String[] args) throws MessagingException {    ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");    JavaMailSender mailSender= (JavaMailSender) ac.getBean("mailSender");    MimeMessage message= mailSender.createMimeMessage();    message.setSubject("spring_mail"); // 邮件主题    // 创建带有附件的消息帮组类    MimeMessageHelper helper = new MimeMessageHelper(message,true,"utf-8");    helper.setTo(new InternetAddress("收件人的邮箱地址"));//设置接收人    helper.setText("Thank you for ordering!"); // 邮件内容    helper.setFrom("发件人的邮箱地址"); // 发件人    // 设置附件    File file = new File("C:\\work\\邮件附件.txt");    // 添加附件    helper.addAttachment(file.getName(), file);    // 发送邮件    mailSender.send(message);}