发送邮件,SpringBoot POP3/SMTP

实例:发送邮件验证码(java,163邮箱)。
项目背景:SpringBoot Maven
思路:采用POP3/SMTP协议 发送邮件。

应用(TestController.java)

package com.xxxxx.xxxxx.admin.ums.control;

import com.xxxxx.xxxxx.admin.ums.util.EmailUtils;
import com.xxxxx.xxxxx.base.constant.ReturnStatus;
import com.xxxxx.xxxxx.base.response.RestResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/admin/ums/test/")
public class TestController {
    @RequestMapping(value = "sendEmail",method = RequestMethod.POST)
    public RestResponse sendEmail(String emailTo){
        System.out.println("=====test=sendEmail=======");
        if(StringUtils.isBlank(emailTo)){
            emailTo = "收件人邮箱";
        }
        
        boolean flg = EmailUtils.sendEmail("标题:测试发邮件", emailTo, "内容:测试发邮件");
        if(!flg){
            return RestResponse.valid(ReturnStatus.BDP_STATUS_VALID,"发送失败");
        }
        return RestResponse.success("操作成功");
    }
}

配置文件(pom.xml)

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

配置文件(projectConfig.properties)

spring.mail.host=smtp.163.com
spring.mail.port=994
spring.mail.username=发件人邮箱,如123456@163.com
#授权码并不是邮箱的登录密码
spring.mail.password=163的授权码

spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

工具类(EmailUtils.java)

package com.xxxxx.xxxxx.admin.ums.util;

import com.xxxxx.xxxxx.admin.ums.constant.KeyPrefix;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import java.util.Date;

@Slf4j
@Component
public class EmailUtils {
    private static String from;
    private static String pwd;
    private static String host;
    private static String port;

    private static JavaMailSenderImpl mailSender;

    @Autowired(required = false)
    public void setMailSender(JavaMailSenderImpl mailSender){
        EmailUtils.mailSender = mailSender;
    }

    @Value("${spring.mail.username}")
    public void setFrom(String from){
        EmailUtils.from = from;
    }
    @Value("${spring.mail.password}")
    public void setPwd(String pwd){
        EmailUtils.pwd = pwd;
    }
    @Value("${spring.mail.host}")
    public void setHost(String host){
        EmailUtils.host = host;
    }
    @Value("${spring.mail.port}")
    public void setPort(String port){
        EmailUtils.port = port;
    }
    
    /**
     * @Title: sendEmail
     * @Description: TODO(发送邮件)
     * @param @param subject  要发送标题
     * @param @param emailTo  要发送的邮箱
     * @param @param text 发送的内容
     * @return boolean 返回类型 true:成功,false:失败
     */
    public static boolean sendEmail(String subject , String emailTo, String text){
        boolean flg = false;

        if(StringUtils.isBlank(subject) || StringUtils.isBlank(emailTo) || StringUtils.isBlank(text)){
            log.error("=======数据不全,发送失败");
            return flg;
        }

        try {
            flg = sendEmailCommon(subject, emailTo, text);
        }catch (Exception e){
            log.error("=======发邮件异常:目标邮箱:"+emailTo+","+e.getMessage());
            e.printStackTrace();
            flg = false;
        }

        return flg;
    }

    public static boolean sendEmailCommon(String title, String emailTo,String content) {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(emailTo);
            message.setSubject(title);
            message.setText(content);
            message.setSentDate(new Date());
            message.setCc(from);	// 设置抄送,出现过发不出去,设置后就可以了
            
            mailSender.send(message);
            log.info("=======发邮件成功:目标邮箱:"+emailTo+",标题:"+title);
            return true;
        }catch (Exception e){
            log.error("=======发邮件异常:目标邮箱:"+emailTo+","+e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
}
如有错漏之处,敬请指正	
					——东东E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值