JavaMailSender 邮件发送

利用JavaMailSender 发送各种类型邮件

 

一、pom文件:

<!--mail -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.1.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
<!-- velocity模板引擎 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.7</version>
</dependency>

二、配置信息

spring.mail.host=smtp.qq.com
spring.mail.username=xxxx@qq.com
spring.mail.password= -- 登录qq邮箱可以在其中配置
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
spring.mail.port=465
spring.mail.properties.mail.smtp.socketFactory.port = 465
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false

在qq邮箱中的设置的账户下开通

三、邮件发送接口

public interface EmailService {
    void sendSimpleMail(String to, String subject, String content);

    void sendHtmlMail(String to, String subject, String content);

    void sendAttachmentsMail(String to, String subject, String content, String filePath);

    void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId);

    void sendTemplateMail(String to, String subject, String content,String templateName);

    void sendMailToMore(String[] to, String subject, String content);
}


邮件发送实现层:
@Service
public class EmailServiceImpl implements EmailService {


    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    public JavaMailSender mailSender ;

    @Autowired
    public VelocityEngine velocityEngine;

    private String from = "xxxxx@qq.com";

    /**
     * 发送文本邮件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        ApplicationContext context = SpringContextUtil.getApplicationContext();
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        try {
            mailSender.send(message);
            logger.info("简单邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送简单邮件时发生异常!", e);
        }

    }

    /**
     * 发送html邮件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendHtmlMail(String to, String subject, String content) {
        MimeMessage message = mailSender.createMimeMessage();

        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            mailSender.send(message);
            logger.info("html邮件发送成功");
        } catch (MessagingException e) {
            logger.error("发送html邮件时发生异常!", e);
        }
    }


    /**
     * 发送带附件的邮件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     */
    @Override
    public void sendAttachmentsMail(String to, String subject, String content, String filePath){
        MimeMessage message = mailSender.createMimeMessage();

        try {
            System.setProperty("mail.mime.splitlongparameters","false");
            MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8");
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(MimeUtility.encodeWord(fileName), file);
            mailSender.send(message);
            logger.info("带附件的邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送带附件的邮件时发生异常!", e);
        }
    }


    /**
     * 发送正文中有静态资源(图片)的邮件
     * @param to
     * @param subject
     * @param content
     * @param rscPath
     * @param rscId
     */
    @Override
    public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
        MimeMessage message = mailSender.createMimeMessage();

        try {
            System.setProperty("mail.mime.splitlongparameters","false");
            MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8");
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            System.out.println("content="+content);
            System.out.println("rscId="+rscId);
            System.out.println("rscPath="+rscPath);
            FileSystemResource res = new FileSystemResource(new File(rscPath));
            helper.addInline(MimeUtility.encodeWord(rscId), res);
            mailSender.send(message);
            logger.info("嵌入静态资源的邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送嵌入静态资源的邮件时发生异常!", e);
        }
    }

    /**
     * @Author hailu
     * @Description  模板邮件发送
     * @Date 15:09 2019/1/29 0029
     * @Param [to, subject, content, templateName]
     * @return void
     **/
    @Override
    public void sendTemplateMail(String to, String subject, String content, String templateName) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        MimeMessageHelper helper = null;
        try {
            helper = new MimeMessageHelper(mimeMessage, true,"UTF-8");
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);

            Map<String, Object> model = new HashMap();
            model.put("username", "xxxx");
            String text = VelocityEngineUtils.mergeTemplateIntoString(
            velocityEngine, templateName, "UTF-8", model);
            helper.setText(text, true);
            mailSender.send(mimeMessage);
            logger.info("模板邮件已经发送。");
            } catch (MessagingException e) {
            logger.error("发送模板邮件时发生异常!", e);
            }

    }

    /**
     * @Author hailu
     * @Description  邮件多人发送
     * @Date 15:51 2019/1/30 0030
     * @Param [to, subject, content]
     * @return void
     **/
    @Override
    public void sendMailToMore(String[] to, String subject, String content) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        try {
            helper = new MimeMessageHelper(mimeMessage, true,"UTF-8");
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            mailSender.send(mimeMessage);
            logger.info("模板邮件已经发送。");
        } catch (MessagingException e) {
            logger.error("发送模板邮件时发生异常!", e);
        }
    }
}

模板文件(注意这里文件需要放在项目路径下和src同级,这里的模板文件可以设计成表可以界面维护取不同模板进行邮件发送):

template.vm
<html>
    <body>
        <h3>你好, ${username}, 这是一封模板邮件!</h3>
    </body>
</html>

 

四、这里还是用了json转换写了一个util:

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class JsonUtil {
    private static ObjectMapper objectMapper = new ObjectMapper();
    static {
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
    public static String parseToJson(Object o) {
        if (o == null) {
            return null;
        } else {
            try {
                return objectMapper.writeValueAsString(o);
            } catch (Exception var2) {
                var2.printStackTrace();
                throw new RuntimeException(var2);
            }
        }
    }
    public static Map parseToMap(String json) {
        Map<String, Object> map = (Map)parseToObject(json, Map.class);
        Iterator iterator = map.entrySet().iterator();

        while(iterator.hasNext()) {
            Map.Entry<String, Object> entry = (Map.Entry)iterator.next();
            if (entry.getValue() instanceof List) {
                List<Object> valueList = (List)entry.getValue();
                if (valueList != null && valueList.size() == 1 && valueList.get(0) instanceof String && StringUtils.isBlank((String)valueList.get(0))) {
                    iterator.remove();
                }
            }
        }

        return map;
    }
    public static <T> T parseToObject(String json, Class<T> toClass) {
        try {
            return objectMapper.readValue(json, toClass);
        } catch (Exception var3) {
            var3.printStackTrace();
            throw new RuntimeException(var3);
        }
    }

}

其中启动的时候自动注入VelocityEngine失败写了配置类

@Component
public class VelocityEngineBean extends VelocityEngine {

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值