java-mail

来源:互联网 发布:百鸟朝凤 知乎 编辑:程序博客网 时间:2024/06/08 02:46

springboot + maven + mail

springboot + maven + mail 发送邮件

  • springboot 使用yml配置文件 代替 properties文件
  • maven 依赖
  • 调用springframework相关方法代码

- 自定义bean 覆盖

配置文件 yml 注意缩进

mymail:  host: smtp.126.com  port: 25  username: *********@126.com  password: ****  simplemsg:    from: ******@126.com    subject: ******  freemarker:    templateLoaderPath: classpath:freemarker    locale: zh_CN    default_encoding: UTF-8

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

相关maven依赖

        <dependency>            <groupId>com.sun.mail</groupId>            <artifactId>javax.mail</artifactId>            <version>1.6.0</version>        </dependency>        <dependency>            <groupId>org.freemarker</groupId>            <artifactId>freemarker</artifactId>            <version>2.3.20</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>4.1.9.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>

代码

MyJavaMailSender.java

主要配置com.mob.dispatcher.config.javamail的相关参数,也可以使用xml进行配置

package com.mob.dispatcher.config.javamail;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.context.annotation.Bean;import org.springframework.mail.javamail.JavaMailSenderImpl;import org.springframework.stereotype.Component;import java.util.Properties;/** * Created by sixm on 2017/11/2. */@Data@RefreshScope@ConfigurationProperties(        prefix = "mymail")@Componentpublic class MyJavaMailSender {//    @Value("${mail.host}")    private String host;//    @Value("${mail.port}")    private int port;//    @Value("${mail.username}")    private String username;//    @Value("${mail.password}")    private String password;    @Bean    public JavaMailSenderImpl getJavaMailSenderImpl() {        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();        javaMailSender.setHost(host);        javaMailSender.setPort(port);        javaMailSender.setUsername(username);        javaMailSender.setPassword(password);        Properties javaMailProperties = new Properties();        javaMailProperties.setProperty("mail.smtp.auth", "true");        javaMailSender.setJavaMailProperties(javaMailProperties);        return javaMailSender;    }}

MyFreeMarkerConfigurer

(org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;)

package com.mob.dispatcher.config.javamail;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;import java.util.Properties;/** * Created by sixm on 2017/11/2. */@Data@ConfigurationProperties(        prefix = "mymail.freemarker")@Componentpublic class MyFreeMarkerConfigurer {    private String templateLoaderPath;    private String locale;    private String default_encoding;    @Bean    public FreeMarkerConfigurer getFreeMarkerConfigurer() {        FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();        Properties properties = new Properties();        properties.setProperty("locale", locale);        properties.setProperty("default_encoding", default_encoding);        freeMarkerConfigurer.setFreemarkerSettings(properties);        return freeMarkerConfigurer;    }}

MySimpleMailMessage

(org.springframework.mail.SimpleMailMessage;)

package com.mob.dispatcher.config.javamail;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.context.annotation.Bean;import org.springframework.mail.SimpleMailMessage;import org.springframework.stereotype.Component;/** * Created by sixm on 2017/11/2. */@RefreshScope@ConfigurationProperties(        prefix = "mymail.simplemsg")@Data@Componentpublic class MySimpleMailMessage {    private String from;    private String subject;    @Bean    public SimpleMailMessage getSimpleMailMessage() {        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();        simpleMailMessage.setSubject(subject);        simpleMailMessage.setFrom(from);        return simpleMailMessage;    }}

发送邮件类MailSender

package com.mob.dispatcher.config.javamail;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Component;import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;import freemarker.template.Template;import javax.mail.internet.MimeMessage;import java.util.HashMap;import java.util.Map;/** * Created by sixm on 2017/11/2. */@Componentpublic class MailSender {    @Autowired    private JavaMailSender javaMailSender;    @Autowired    private SimpleMailMessage simpleMailMessage;    @Autowired    private FreeMarkerConfigurer freeMarkerConfigurer;    /**     *     * @Description: 从模板中构建邮件内容     * @param nickName        用户昵称     * @param content        邮件内容     * @param email            接受邮件     *     * Created by sixm on 2017/11/2.     */    public void send(String nickName, String content, String email) {        String to = email;        String text = "";        Map<String, String> map = new HashMap<String, String>(1);        map.put("nickName", nickName);        map.put("content", content);        try {            // 根据模板内容,动态把map中的数据填充进去,生成HTML            Template  template = freeMarkerConfigurer.getConfiguration().getTemplate("mail.ftl");            // map中的key,对应模板中的${key}表达式            text = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);        } catch (Exception e) {            e.printStackTrace();        }        sendMail(to, null, text);    }    /**     *     * @Description: 执行发送邮件     * @param to            收件人邮箱     * @param subject        邮件主题     * @param content        邮件内容     *     *Created by sixm on 2017/11/2.     */    public void sendMail(String to, String subject, String content) {        try {            MimeMessage message = javaMailSender.createMimeMessage();            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");            messageHelper.setFrom(simpleMailMessage.getFrom());            if (subject != null) {                messageHelper.setSubject(subject);            } else {                messageHelper.setSubject(simpleMailMessage.getSubject());            }            messageHelper.setTo(to);            messageHelper.setText(content, true);            javaMailSender.send(message);        } catch (Exception e) {            e.printStackTrace();        }    }}

发送模版 mail.ftl

文件位置:resourse.freemarket.mail.ftl.
文件位置要和配置文件相对应
可以根据不同的场景,配置不同的模版并指定即可。

<h2><font color="green">${nickName}</font></h2><p>${content}</p>

调用@Test

import com.mob.dispatcher.MobDispatcherApplication;import com.mob.dispatcher.config.javamail.MailSender;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;/** * Created by sixm on 2017/11/2. */@RunWith(SpringRunner.class)@SpringBootTest(classes = MobDispatcherApplication.class)public class MailTest {    @Autowired    private MailSender mailSender;    @Test    public void sendMail(){        mailSender.sendMail("******@qq.com","周末聚合","米其林");    }}

注意:

部分有将服务器比如126 、 163等,会讲重复度高、有特殊字符的邮件当作垃圾邮件,并拦截。
根据返回代码可以参考: 网易退信链接

原创粉丝点击