欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring boot 发送邮件

程序员文章站 2022-07-05 08:22:46
一、前期准备 1.包引入 2.配置文件 这里切记 password是授权密码 授权密码 授权密码 不是你的邮箱登陆密码 二、核心代码 里面有一个MailSendVo对象 这个对象封装了收件人、邮件标题、邮件内容三个属性 详情可以点进源码查看 三、源码分享 多说一句 邮件发送的速度与程序无关,千万不要 ......

一、前期准备

1.包引入

<dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-mail</artifactid>
</dependency>

2.配置文件

spring.mail.protocol=smtp
spring.mail.host=smtp.163.com
spring.mail.username=zhaobaolintest@163.com
spring.mail.password=abc123456789

这里切记 password是授权密码 授权密码 授权密码  不是你的邮箱登陆密码

二、核心代码

import com.example.demo.dto.vo.mailsendvo;
import org.springframework.beans.factory.annotation.value;
import org.springframework.stereotype.component;
import org.springframework.util.stringutils;

import javax.mail.*;
import javax.mail.internet.internetaddress;
import javax.mail.internet.mimemessage;
import java.util.date;
import java.util.properties;

/**
 * @author:zhao-baolin
 * @description: 邮件发送类
 * @date:created in 2018/4/17
 * @modified by:
 */
@component
public class mailutil {

    @value("${spring.mail.username}")
    private string frommail;

    @value("${spring.mail.password}")
    private string frompassword;

    @value("${spring.mail.host}")
    private string host;

    /**
     * 邮件发送
     */
    public boolean send(mailsendvo sendmailvo) throws exception
    {
        system.out.println(sendmailvo.tostring());
        final string ssl_factory = "javax.net.ssl.sslsocketfactory";

        if(stringutils.isempty(sendmailvo.gettomail()) || stringutils.isempty(sendmailvo.gettitle()) || stringutils.isempty(sendmailvo.getcontent())){
            system.out.println("发送邮件参数为空 "+sendmailvo.tostring());
            return false;
        }
        // 1. 创建一封邮件
        properties props = new properties();
        props.setproperty("mail.smtp.host",host);
        props.setproperty("mail.smtp.auth", "true");

        props.setproperty("mail.smtp.socketfactory.class", ssl_factory);
        props.setproperty("mail.smtp.socketfactory.fallback", "false");

        props.setproperty("mail.smtp.port", "465");
        props.setproperty("mail.smtp.socketfactory.port", "465");

        authenticator auth = new authenticator() {
            @override
            public passwordauthentication getpasswordauthentication(){
                return new passwordauthentication(frommail, frompassword);
            }
        };
        session session = session.getinstance(props,auth);

        // 2.创建一个message,它相当于是邮件内容
        message message = new mimemessage(session);

        // 设置发送者
        message.setfrom(new internetaddress(frommail));

        // 设置收件人 抄送给自己 避免网易554错误
        message.setrecipient(mimemessage.recipienttype.cc, new internetaddress(frommail));
        message.setrecipient(mimemessage.recipienttype.to, new internetaddress(sendmailvo.gettomail()));

        // 邮件主题
        message.setsubject(sendmailvo.gettitle());
        // 邮件正文
        message.setcontent(sendmailvo.getcontent(), "text/html;charset=utf-8");

        // 设置显示的发件时间
        message.setsentdate(new date());

        // 保存前面的设置
        message.savechanges();

        try {
            // 创建 transport用于将邮件发送
            transport.send(message);

        }catch (exception e){
            system.out.println(sendmailvo.gettitle()+"发送邮件失败 "+e.getmessage());
            return false;
        }

        system.out.println("邮件发送结束");
        return true;

    }
    
}

里面有一个mailsendvo对象 这个对象封装了收件人、邮件标题、邮件内容三个属性 详情可以点进源码查看

三、源码分享

spring boot 发送邮件

 

多说一句 邮件发送的速度与程序无关,千万不要跑程序里到处找bug,邮件发送只与网络有关。