java-mail

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"
)
@Component
public 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"
)
@Component
public 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
@Component
public 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.
 */
@Component
public 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等,会讲重复度高、有特殊字符的邮件当作垃圾邮件,并拦截。
根据返回代码可以参考: 网易退信链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值