Spring代码实例系列-10:通过Spring Mail发送简单邮件、附件和HTML邮件

超级通道:Spring代码实例系列-绪论

本章通过Spring Mail实现了简单邮件、附件和HTML邮件的发送,涉及的主要知识点:
1. Spring mail实现:JavaMailSenderImpl
2. 简单消息:SimpleMailMessage
3. 扩展:MimeMessage
4. MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
4. 自定义邮件模板:MailTemplate

0.开启SMTP服务和获取授权码

通过某个邮箱进行第三方邮件发送时,需要登陆此邮箱开启SMTP服务并获取授权码。
本例以163作为发送端邮件
1. 开启SMTP的步骤是:登陆邮箱–>设置–>POP3/SMTP/IMAP–>开启
2. 获取授权码的步骤是:登陆邮箱–>设置–>客户端授权密码–>开启(开启授权码有风险,记得开发完成后关闭此功能)
3. 关于授权码的说明:通过Java发送邮件是,需要setPassword,这里的Password就是所谓的授权码,而非邮箱的登陆密码。
4. 163邮箱的SMTP服务器: smtp.163.com,端口号是25。
5. 关于邮箱的服务器和端口号,可以参考常用的邮箱服务器(SMTP、POP3)地址、端口

1.目录结构

project
    \---src
        \---main
            \---java
            |   \---pers
            |       \---hanchao
            |           \---mail
            |               \---App.java
            |               \---MailUtils.java
            |               \---MailTemplate.java
            \---resources
                \---spring-config
                    \---spring-mail.xml
                \---spring-mail.properties

2.App.java

package pers.hanchao.mail;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.mail.MessagingException;

/**
 * <p>简单对Spring mail的应用:简单消息邮件、附件邮件以及html邮件</p>
 * @author hanchao 2018/1/13 11:36
 **/
public class App {

    public static void main(String[] args) throws MessagingException {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-mail.xml");
        MailUtils mailUtils = (MailUtils) context.getBean("mailUtils");
        mailUtils.sendSimpleMail("******@163.com","******@163.com",
                "简单邮件测试","这是一个简单邮件发送示例:Hello World");

        String attachPath = "C:\\Users\\hanchao\\Pictures\\Saved Pictures\\红狼.jpg";
        mailUtils.sendMimeMail("******@163.com","******@163.com",
                "HTML邮件测试","这是一个HTML邮件发送示例:Hello World",MailTemplate.TEMPLATE_TEST,attachPath);
    }
}

3.MailUtils.java

package pers.hanchao.mail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * <p>简单的邮件工具类,实现了简单邮件、附件和html邮件的发送</p>
 * @author hanchao 2018/1/13 11:48
 **/
@Component
public class MailUtils {
    @Autowired
    private JavaMailSenderImpl javaMailSender;

    /**
     * <p>通过JavaMailSenderImpl.send(SimpleMailMessage)发送简单消息</p>
     * @author hanchao 2018/1/13 9:56
     **/
    public void sendSimpleMail(String from,String to,String subject,String message){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(message);
        //发送邮件
        javaMailSender.send(simpleMailMessage);
    }

    /**
     * <p>通过JavaMailSenderImpl.send(MimeMessage)以及MimeMessageHelper发送HTML内容和附件</p>
     * @author hanchao 2018/1/13 11:37
     **/
    public void sendMimeMail(String from,String to,String subject,String message,int template,String attachPath) throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //通过MimeMessageHelper进行邮件内容的设置
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setFrom(from);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        //发送html内容
        mimeMessageHelper.setText(MailTemplate.getText(MailTemplate.TEMPLATE_TEST,message),true);
        //发送附件
        File testAttach = new File(attachPath);
        if (testAttach.exists()){
            mimeMessageHelper.addAttachment("test.jpg",testAttach);
        }
        //发送邮件
        javaMailSender.send(mimeMessage);
    }
}

4.MailTemplate.java

package pers.hanchao.mail;

/**
 * <p>邮件模板示例</p>
 * @author hanchao 2018/1/13 11:36
 **/
public class MailTemplate {
    public static final int TEMPLATE_TEST = 1;

    public static String getText(int templateType,String message){
        switch (templateType){
            case 1:
                return "<html>\n" +
                        "<body style=\"background-color:PowderBlue;\">\n" +
                        "<p style=\"font-family:times;color:green;font-size:30px\">\n" +
                        message + "</p>\n" +
                        "</body>\n" +
                        "</html>";
                default:
                    return message;
        }
    }
}

5.spring-mail.xml

<?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:annotation-config/>

    <!--开启component扫描-->
    <context:component-scan base-package="pers.hanchao.*"/>

    <!--通过spring-mail.properties配置属性-->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="fileEncoding" value="UTF-8"/>
        <property name="location" value="spring-mail.properties"/>
    </bean>

    <!--spring实现的JavaMail-->
    <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.host}"/>
        <property name="port" value="${mail.port}"/>
        <property name="defaultEncoding" value="${mail.encode}"/>
        <property name="username" value="${mail.username}"/>
        <property name="password" value="${mail.password}"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.timeout">20000</prop>
            </props>
        </property>
    </bean>
</beans>

6.spring-mail.properties

mail.host=smtp.163.com
mail.port=25
mail.encode=utf-8
mail.username=******5272@163.com
#授权码,而非邮箱的登陆密码
mail.password=******

7.result

7.1.简单邮件

这里写图片描述

7.2.扩展邮件

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值