springboot实现邮箱发送功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


邮箱效果图

在这里插入图片描述

1.可以利用在出现问题进行邮箱提醒
2.编写html 用于在邮箱中展示的样式


提示:以下是本篇文章正文内容,下面案例可供参考

一、pom配置

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--邮件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.3</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>

二、页面编写

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>系统通知邮件模板-纯文本型</title>
</head>

<body>
<div style="font-size: 14px;">
    <br><br><br><br>
    <div style="width: 600px; margin: 0 auto; background-color: #00838a; border-radius: 3px;">
        <div style="padding: 0 15px; padding-bottom: 20px;">
            <div style="height: 72px;">
                <div>
                    <a href="https://www.lplovemm.love/" target="_blank" rel="noopener"
                       style="text-decoration: none;">
                        <img src="http://mall.bydauto.com.cn/pc/_nuxt/img/logo.97a8e60.svg" style="height: 72px;"
                             alt="BYD" title="BYD">
                    </a>
                </div>
            </div>
            <div style="background: #fff; padding: 20px 15px; border-radius: 3px;">
                <div><span style="font-size: 16px; font-weight: bold;">待办通知:</span>
                    <div style="line-height: 24px; margin-top: 10px;">
                        <div>
                            您有一条新的“
                            <span style="font-weight: bold;">订单询价</span>
                            待办,编号为“
                            <span style="font-weight: bold;" id="ip"></span>
                            ”,收到信息后请尽快
                            <a style="color: #006eff;font-weight: bold;" href="https://mall.bydauto.com.cn/"
                               target="_blank" rel="noopener">登录MALL系统</a>处理!
                        </div>
                    </div>
                </div>
                <div style="margin-top: 30px;">
                    <div><span
                            style="font-size: 15px; font-weight: bold; position: relative; top: -4px;">流程信息</span>
                    </div>
                    <table
                            style="width: 400px; border-spacing: 0px; border-collapse: collapse; border: none; margin-top: 20px;">
                        <tbody>
                        <tr style="height: 45px;">
                            <td
                                    style="width: 150px; height: 40px; background: #F6F6F6;border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">
                                上一节点</td>
                            <td
                                    style="width: 250px;height: 40px; border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">
                                订单咨询</td>
                        </tr>
                        <tr style="height: 45px;">
                            <td
                                    style="width: 150px;height: 40px; background: #F6F6F6;border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">
                                处理人</td>
                            <td
                                    style="width: 250px;height: 40px; border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">
                                张先生</td>
                        </tr>
                        <tr style="height: 45px;">
                            <td
                                    style="width: 150px; height: 40px; background: #F6F6F6;border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">
                                当前节点</td>
                            <td
                                    style="width: 250px;height: 40px; border: 1px solid #DBDBDB; font-size: 14px; font-weight: normal; text-align: left; padding-left: 14px;">
                                <a style="color: #006eff;" href="https://mall.bydauto.com.cn/" target="_blank"
                                   rel="noopener">订单询价</a>
                            </td>
                        </tr>
                        </tbody>
                    </table>
                </div>
                <div style="margin-top: 60px;margin-bottom: 10px;"><span
                        style="font-size: 13px; font-weight: bold; color: #666;">温馨提醒</span>
                    <div style="line-height: 24px; margin-top: 10px;">
                        <div style="font-size: 13px; color: #666;">使用过程中如有任何问题,请联系LIMS系统管理员。</div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div
            style="width: 600px; margin: 0 auto;  margin-top: 50px; font-size: 12px; -webkit-font-smoothing: subpixel-antialiased; text-size-adjust: 100%;">
        <p
                style="text-align: center; line-height: 20.4px; text-size-adjust: 100%; font-family: 'Microsoft YaHei'!important; padding: 0px !important; margin: 0px !important; color: #7e8890 !important;">
                <span class="appleLinks">
                    Copyright © 2023-2024 北京XXXX科技股份有限公司. 保留所有权利。</span>
        </p>
        <p
                style="text-align: center;line-height: 20.4px; text-size-adjust: 100%; font-family: 'Microsoft YaHei'!important; padding: 0px !important; margin: 0px; color: #7e8890 !important; margin-top: 10px;">
                <span class="appleLinks">
                    邮件由系统自动发送,请勿直接回复本邮件!</span>
        </p>
    </div>
</div>
</body>

</html>

三、配置yml

  #配置日志
  logging:
    level:
      root: info
    application:
      name: spring-boot-email
    mvc.async.request-timeout: 20000
  #配置邮箱
  mail:
    default-encoding: UTF-8
    host: smtp.163.com
    password: **********
    port: 465
    username: **********@163.com
    properties:
      mail:
        smtp:
          auth: true
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          starttls:
            enable: true

四、邮件工具类

package com.information.utils;

import java.io.*;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.FileSystemResource;

/**
 * 发送邮件工具类
 */
public class MailUtil {

    private final static Logger logger = LoggerFactory.getLogger(MailUtil.class);

    /**
     * 邮件发送
     * @param mailHost 邮件服务地址
     * @param fromMail 发件人
     * @param fromName 发件人名
     * @param fromMailPwd 发件人密码
     * @param toMails 收件人,多个用英文逗号分隔
     * @param mailTitle 邮件标题
     * @param mailContent 邮件内容
     * @throws Exception
     */
    public static void sendMail(String mailHost, String fromMail, String fromName, String fromMailPwd,
                                String toMails, String mailTitle, String mailContent) throws Exception {
        String[] toMailArr = null;
        if (toMails != null && !toMails.equals("")) {
            toMailArr = toMails.split(",");
        } else {
            throw new Exception("邮件发送人不能为空");
        }

        // 邮件属性信息
        Properties props = new Properties();
        props.put("mail.host", mailHost);
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");

        Session session = Session.getInstance(props); // 根据属性新建一个邮件会话
        //session.setDebug(true); // 是否打印调试信息
        toMailArr = toMails.split(",");
        for (String to : toMailArr) {
            MimeMessage message = new MimeMessage(session); // 由邮件会话新建一个消息对象
            message.setFrom(new InternetAddress(fromMail,fromName));
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(to, fromName));// 设置收件人,并设置其接收类型为TO
            message.setSubject(mailTitle);// 设置标题
            message.setContent(mailContent, "text/html;charset=UTF-8"); // 设置邮件内容类型为html
            message.setSentDate(new Date());// 设置发信时间
            message.saveChanges();// 存储邮件信息


            // 发送邮件
            Transport transport = session.getTransport();
            transport.connect(fromMail, fromMailPwd);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        }
    }
 
    /**
     * 读取html文件为String
     * @param htmlFileName
     * @return
     * @throws Exception
     */
    public static String readHtmlToString(String htmlFileName) throws Exception{
        InputStream is = null;
        Reader reader = null;
        try {
            is = MailUtil.class.getClassLoader().getResourceAsStream(htmlFileName);
            if (is ==  null) {
                throw new Exception("未找到模板文件");
            }
            reader = new InputStreamReader(is, "UTF-8");
            StringBuilder sb = new StringBuilder();
            int bufferSize = 1024;
            char[] buffer = new char[bufferSize];
            int length = 0;
            while ((length = reader.read(buffer, 0, bufferSize)) != -1){
                sb.append(buffer, 0, length);
            }
            return sb.toString();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                logger.error("关闭io流异常", e);
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch ( IOException e) {
                logger.error("关闭io流异常", e);
            }
        }
    }

}

五、测试发送

    @Autowired
    private JavaMailSender mailSender;
    /**
     * 发送者邮箱
     */
    @Value("${spring.mail.username}")
    public String MAIL_USERNAME;
    /**
     * 发送者host
     */
    @Value("${spring.mail.host}")
    public String MAIL_HOST;
    /**
     * 发送者秘钥
     */
    @Value("${spring.mail.password}")
    public String PASSWORD;
    @RequestMapping("/ip")
    @ResponseBody
    public String bc(HttpServletRequest request){
        try {
            List<String> list = new LinkedList<>();
            Enumeration enumeration = NetworkInterface.getNetworkInterfaces();
            while (enumeration.hasMoreElements()) {
                NetworkInterface network = (NetworkInterface) enumeration.nextElement();
                if (network.isVirtual() || !network.isUp()) {
                    continue;
                } else {
                    Enumeration addresses = network.getInetAddresses();
                    while (addresses.hasMoreElements()) {
                        InetAddress address = (InetAddress) addresses.nextElement();
                        if (address != null && (address instanceof Inet4Address || address instanceof Inet6Address)) {
                            list.add(address.getHostAddress());
                        }
                    }
                }
            }
            //获取id地址
            String ip= InetAddress.getLocalHost().getHostAddress();
            // 创建 HttpClient 实例
            CloseableHttpClient httpClient = HttpClientBuilder.create().build();
            //根据ip地址和百度ip普通定位的ak,去获取具体位置
            String url = "https://api.map.baidu.com/location/ip?ip="+ip+"&coor=bd09ll&ak=***********";
            // 创建 HttpGet 请求
            HttpGet httpGet = new HttpGet(url);
            HttpResponse response = httpClient.execute(httpGet);
            HttpEntity entity = response.getEntity();
            // 转换为字符串
            String json = EntityUtils.toString(entity);
            Map map = (Map) JSONObject.parse(json); 
            Map content = (Map) map.get("content");
            Map point = (Map) content.get("point");
            JSONObject jsonObject = JSONObject.parseObject(point.toString());
            String x = jsonObject.getString("x");
            String y = jsonObject.getString("y");
            // 读取html模板
            String html = MailUtil.readHtmlToString("mailTemplate.html");
            // 将拿到的x和y的经纬度写入模板内容
            Document doc = Jsoup.parse(html);
            
            doc.getElementById("ip").html(ip);
            doc.getElementById("x").html(x);
            doc.getElementById("y").html(y);
            
            String result = doc.toString();
            String fromName = "小扎仙森";
            String toMails = "1046406274@qq.com";
            String mailTitle = "hello java mail";
            String mailContent = result;
             /**
			   * 邮件发送
			    * @param mailHost 邮件服务地址
			    * @param fromMail 发件人
			    * @param fromName 发件人名
			    * @param fromMailPwd 发件人密码
			    * @param toMails 收件人,多个用英文逗号分隔
			    * @param mailTitle 邮件标题
			    * @param mailContent 邮件内容
			    * @throws Exception
			*/
            // 发送邮件
            MailUtil.sendMail(MAIL_HOST, MAIL_USERNAME,fromName, PASSWORD, toMails, mailTitle, mailContent);
            return "邮箱发送成功";
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return "发送失败";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值