Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java发送邮件-模板

java发送邮件-模板

作者头像
全栈程序员站长
发布于 2022-08-28 02:36:03
发布于 2022-08-28 02:36:03
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

今天写完了一个关于使用模板发送邮件的代码,作为例子保存着,希望以后用得着,也希望能够帮助到需要帮助的人 以163网易邮箱为例,使用java发送邮件,发送以邮件时使用模板(.ftl文件转换为html)发送邮件内容,并附带上附件,可抄送给多个人。项目的结构目录如下

邮箱配置文件mail.properties参数如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#mail sender settings
# for example: smtp.163.com
mail.server=smtp.163.com
#the sender mail
mail.sender=xxx@163.com
#the sender nickname
mail.nickname=
#sender mail username
mail.username=xxx@163.com
#sender mail password
mail.password=hpc2013210831xxx

模板mail.ftl如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>
    <span>${username},你好!</span>
    <p>${content}</p>
</div>

邮件发送信息配置类ConfigLoader.java如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.hpc.test.mail;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ConfigLoader { 
   
    // 日志记录对象
    private static Logger log = LoggerFactory.getLogger(ConfigLoader.class);
    // 配置文件路径
    private static String mailPath = "properties/mail.properties";
    // 邮件发送SMTP主机
    private static String server;
    // 发件人邮箱地址
    private static String sender;
    // 发件人邮箱用户名
    private static String username;
    // 发件人邮箱密码
    private static String password;
    // 发件人显示昵称
    private static String nickname;

    static {
        // 类初始化后加载文件
        InputStream in = ConfigLoader.class.getClassLoader().getResourceAsStream(mailPath);
        Properties props = new Properties();
        try {
            props.load(in);
        } catch (IOException e) {
            log.error("load mail setting error, please check the file path:" + mailPath);
            log.error(e.toString(), e);
        }

        server = props.getProperty("mail.server");
        sender = props.getProperty("mail.sender");
        username = props.getProperty("mail.username");
        password = props.getProperty("mail.password");
        nickname = props.getProperty("mail.nickname");
        log.debug("load mail setting success, file path: " + mailPath);
    }

    public static String getServer() {
        return server;
    }

    public static String getSender() {
        return sender;
    }

    public static String getUsername() {
        return username;
    }

    public static String getPassword() {
        return password;
    }

    public static String getNickname() {
        return nickname;
    }

    public static void setMailPath(String mailPath) {
        ConfigLoader.mailPath = mailPath;
    }
}

邮件发送实现类MailSender.java如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.hpc.test.mail;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class MailSender { 
   
    // 日志记录对象
    private static Logger log = LoggerFactory.getLogger(MailSender.class);

    // MIME邮件对象
    private MimeMessage mimeMsg;
    // 邮件会话对象
    private Session session;
    // 系统属性
    private Properties properties;
    // Multilpart对象,邮件内容,标题,附件等内容均添加到其中后再生成
    private Multipart mp;
    // 发件人用户名
    private String username;
    // 发件人密码
    private String password;
    // 发件人昵称
    private String nickname;

    /** * 构造函数 * @param smtp 发送主机名 */
    public MailSender(String smtp) {
        setSmptHost(smtp);
        createMimeMessage();
    }

    /** * 设置权限坚定配置 * @param need 是否需要权限 * @desc */
    public void setNeedAuth(boolean need) {
        if (null == properties) {
            properties = System.getProperties();
        }
        if (need) {
            properties.put("mail.smtp.auth", "true");
        }
        else {
            properties.put("mail.smtp.auth", "false");
        }
        log.debug("set smtp auth success; mail.smtp.auth = " + need);
    }

    /** * 创建邮件对象 * @description */
    public void createMimeMessage() {
        // 获取邮件会话对象
        session = Session.getDefaultInstance(properties, null);
        // 创建邮件MIME对象
        mimeMsg = new MimeMessage(session);
        mp = new MimeMultipart();
        log.debug("create session and mimeMessage success");
    }

    /** * 设置邮件发送的SMTP主机 * @param smtp 发送主机名 * @description */
    public void setSmptHost(String smtp) {
        if(null == properties) {
            properties = System.getProperties();
        }
        properties.put("mail.smtp.host", smtp);
        log.debug("set system properties success : mail.smtp.host = " + smtp);
    }

    /** * 设置发送邮件的主题 * @param subject 邮件的主题 * @throws UnsupportedEncodingException * @throws MessagingException * @desc */
    public void setSubject(String subject) throws UnsupportedEncodingException, MessagingException {
        mimeMsg.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
        log.debug("set mail subject success, subject = " +subject);
    }

    public void setBody(String mailBody) throws MessagingException {
        BodyPart bp = new MimeBodyPart();
        bp.setContent("" + mailBody, "text/html;charset=utf-8");
        mp.addBodyPart(bp);
        log.debug("set mail body content success, mailBody = " + mailBody);
    }

    /** * 添加邮件附件,附件可为多个 * @param fileMap 文件绝对路径map集合 * @throws MessagingException */
    public void setFileAffix(Map<String, String> fileMap) throws MessagingException, UnsupportedEncodingException {
        // 获取附件
        for (String file: fileMap.keySet()) {
            // 创建一个存放附件的BodyPart对象
            BodyPart bp = new MimeBodyPart();
            // 获取文件路径
            String filePath = fileMap.get(file);
            String[] fileNames = filePath.split("/");
            // 获取文件名
            String fileName = fileNames[fileNames.length-1];
            // 设置附件名称,附件名称为中文时先用utf-8编码
            bp.setFileName(MimeUtility.encodeWord(fileName, "utf-8", null));
            FileDataSource fields = new FileDataSource(filePath);
            bp.setDataHandler(new DataHandler(fields));
            // multipart中添加bodypart
            mp.addBodyPart(bp);
            log.debug("mail add file success, filepath = " + filePath);
        }
        log.debug("setFileAffix end with success");
    }

    /** * 设置发件人邮箱地址 * @param sender 发件人邮箱地址 * @throws UnsupportedEncodingException * @throws MessagingException * @desc */
    public void setSender(String sender) throws UnsupportedEncodingException, MessagingException {
        nickname = MimeUtility.encodeText(nickname, "utf-8", "B");
        mimeMsg.setFrom(new InternetAddress(nickname + "<" + sender + ">"));
        log.debug("set mail sender and nickname success, sender = " + sender);
    }

    /** * 设置收件人邮箱地址 可以设置多个收件人 * @param receivers 收件人邮箱地址List集合 * @throws MessagingException * @desc */
    public void setReceiver(String[] receivers) throws MessagingException {
        // 将收件人数组设置为InternetAddress数组类型
        List<InternetAddress> receiverList = new ArrayList<InternetAddress>();
        for (String receiver : receivers) {
            receiverList.add(new InternetAddress(receiver));
        }
        InternetAddress[] addresses = receiverList.toArray(new InternetAddress[receivers.length]);
        mimeMsg.setRecipients(Message.RecipientType.TO, addresses);
        log.debug("set mail receiver success, the number of receivers is = " + addresses.length);
    }

    /** * 设置抄送人邮箱地址 * @param copyTos 抄送人邮箱地址 * @throws MessagingException * @desc */
    public void setCopyTo(String[] copyTos) throws MessagingException {
        // 将抄送人数组设置为InternetAddress数组类型
        List<InternetAddress> copyToList = new ArrayList<InternetAddress>();
        for (String copyto : copyTos) {
            copyToList.add(new InternetAddress(copyto));
        }
        InternetAddress[] addresses = copyToList.toArray(new InternetAddress[copyTos.length]);
        mimeMsg.setRecipients(Message.RecipientType.CC, addresses);
        log.debug("set mail copyto receiver success, the number of copyTos is " + copyTos.length);
    }

    /** * 设置发件人用户名密码进行发送邮件操作 * @throws MessagingException * @desc */
    public void sendout() throws MessagingException {
        mimeMsg.setContent(mp);
        mimeMsg.saveChanges();
        Session mailSession = Session.getDefaultInstance(properties, null);
        Transport transport = mailSession.getTransport("smtp");
        transport.connect((String) properties.get("mail.smtp.host"), username, password);
        transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
        transport.close();
        log.debug("send mail success");
    }

    /** * 设置发件人用户名、密码、昵称 * @param username 发件人用户名 * @param password 发件人密码 * @param nickname 发件人昵称 * @desc */
    public void setNamePass(String username, String password, String nickname) {
        this.username = username;
        this.password = password;
        this.nickname = nickname;
    }
}

邮件发送工具类MailUtil.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.hpc.test.mail;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.mail.MessagingException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class MailUtil { 
   
    private static Logger log = LoggerFactory.getLogger(MailUtil.class);

    /** * 根据模版名称查找模版,加载目标内容后发送邮件,抄送给copyTos * @param receivers 收件人邮箱地址数组 * @param copyTos 抄送人邮箱地址数组 * @param subject 邮件主题 * @param fileMap 附件路径map集合 * @param map 邮件内容与模板内容转换对象 * @param templateName 模板文件名称 * @throws UnsupportedEncodingException * @throws MessagingException * */
    public static void sendMailFileByTemplateWithCopyto(String[] receivers, String[] copyTos, String subject, Map<String, String> fileMap, Map<String, String> map, String templateName) throws UnsupportedEncodingException, MessagingException {
        String mailBody = "";
        String server = ConfigLoader.getServer();
        String sender = ConfigLoader.getSender();
        String username = ConfigLoader.getUsername();
        String password = ConfigLoader.getPassword();
        String nickname = ConfigLoader.getNickname();
        MailSender mail = new MailSender(server);
        mail.setNeedAuth(true);
        mail.setNamePass(username, password, nickname);
        mailBody = TemplateFactory.genrateHtmlFromFtl(templateName, map);
        mail.setSubject(subject);
        mail.setFileAffix(fileMap);
        mail.setBody(mailBody);
        mail.setReceiver(receivers);
        mail.setSender(sender);
        mail.sendout();
    }
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146480.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 Java 发送邮件
在我们的应用程序中有时需要给用户发送邮件,例如激活邮件、通知邮件等等。那么如何使用 Java 来给用户发送邮件呢?
宋先生
2019/07/18
2.4K0
Java-工具类之发送邮件
代码已托管到 https://github.com/yangshangwei/commonUtils
小小工匠
2021/08/17
1.7K0
Java常用工具类之发送邮件
package com.csice.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingE
二十三年蝉
2018/02/28
1.5K0
java 邮件发送
步骤1:pom.xml添加依赖项 1 <!--mail--> 2 3 <dependency> 4 <groupId>javax.mail</groupId> 5 <artifactId>mailapi</artifactId> 6 <version>1.4.2</version> 7 </dependency> 8 9 <dependency> 10
菩提树下的杨过
2018/01/19
1.4K0
java之jmail实现邮件发送
https://zhidao.baidu.com/question/1431992442917304139.html
周杰伦本人
2023/10/12
2590
java之jmail实现邮件发送
基于SSM的 spring 发送邮件的实现
由于考虑到项目中需要,如果程序出现异常或其它问题,可以发送邮件来及时提醒后台维护人员处理。所以目前考虑使用JavaMail来实现邮件发送!如下,是我整理的一些内容,做个笔记记录下:(当然,在这功能实现之前,需要搭建好ssm的基本框架!)
AI码真香
2022/09/13
4880
基于SSM的 spring 发送邮件的实现
Java发送邮件(含附件)
前几天写了一个Java发送邮件的帮助类i,可以发送QQ和163的邮箱,也可以发送附件,写个一个主要的方法,其他的可以自己封装。代码如下:
付威
2020/01/21
1.5K0
java发送邮件简单的方式
今天在业务中用到的使用java发送邮件的方法,适用于简单发送邮件,可以对其进行再次封装,实现对发信的进一步简化,在这里进行记录一下。教程原文参考自Java 发送邮件 | 菜鸟教程 (runoob.com)
吃猫的鱼Code
2023/03/18
4860
【Email】Java发送邮件接口与配置类
可能最近写博客时间不会很多,最近又在搞一个项目了。 发送邮件的类,我以前写过,不过写的不是接口封装的,现在自己项目用到了,就重新写了一下,现在把它分享出来给大家。
谙忆
2021/01/21
6690
【Email】Java发送邮件接口与配置类
Java发送邮件工具类
这是从根据从码云上找到的一个邮件发送开源项目进行了一定的修改后 这里用的是Spring Boot项目进行的测试 项目结构: pom文件需要引入以下三个jar包: <dependency
二十三年蝉
2018/04/10
2.9K0
Java发送邮件工具类
公司内部邮箱服务器发送邮件 java版
由于需要给合作方以压缩包的形式每天返回数据,基于我们自己写的分布式程序,而月末通过返回的数据,来与合作方进行对账,所以每天数据返回的成败就至关重要了,但又懒得每天去查看日志,刚好借助一下公司内部的邮件服务器。
shengjk1
2018/10/24
2.1K0
带附件/密送/抄送的 javaMail 邮件发送 -- java_demo(两种实现方式)
javaMail 的邮件发送包括了抄送(CC),密送(BCC)采用springBoot
allsmallpig
2021/02/25
1.6K0
基于smtp协议的邮件系统(自己写的)
最近几天做好了应用【贱泰迪】,其中有个意见反馈,发送邮件, 我知道可以调用系统发送邮件,但这种方法有个弊端,就是您的手机必须安装Mail的客户端, 因此我想不用系统发送邮件这种方式,能不能向任意邮
xiangzhihong
2018/01/26
2.7K0
java中使用自己的邮箱进行多人邮件发送
email.properties文件如下: host=smtp.qq.com //这是qq邮箱,如果是其他邮箱 服务要配置成相应的host user=自己邮箱名 pwd=邮箱密码 subject=主题 1:167359230@qq.com //发送人 2:17655858721@qq.com import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream;
用户5166556
2019/04/16
1K0
Java发送邮件工具类
发送邮箱需要去开启 POP3/SMTP服务, 下面所有的密码都是授权码!!!! qq邮箱的设置在QQ邮箱-->设置-->账号-->进行设置
全栈程序员站长
2022/08/28
6590
Java发送邮件工具类
【java基础】javaMail发送邮件设置发件人,重点设置中文昵称
package com.ztb.common.util.email; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSende
用户5640963
2019/07/25
5.5K0
java发送邮件带url、html
此类邮件URL需要做校验,如果链接中只包含一个标示,则只对当前标示加密,如果所有参数都暴露在地址栏中可以将所有参数拼起来用MD5或者其他方式加密后存放在该URL中,例如为validateCode,此次也要对validateCode的值做encode转换,不然特殊符号在URL中会自动转换,之后只对validateCode校验即可知道该链接是否正确。
全栈程序员站长
2022/08/28
1.4K0
java发送邮件带url、html
邮件 | 教你使用 JAVA实现 邮件发送 功能
需求:使用Java来实现‘邮件发送’功能 发送方:QQ邮箱 接收方:126邮箱 环境:myeclipse、jdk1.8、mail包、maven 项目下载:(技术群会员,方可下载)(全文最后申请入群即可
码神联盟
2018/07/31
1.5K0
邮件 | 教你使用 JAVA实现 邮件发送 功能
Java发送邮件案例
在日常开发中,有时会遇到向用户发送邮件的场景,例如发送注册验证码(现在基本都是发手机验证码了)、邀请链接,有时也会遇到发送带附件的邮件等业务场景。本案例以Java发送邮件为例对这些功能做一整理,希望能够对大家有所帮助。
小诸葛
2020/04/14
1.2K0
Java发送邮件案例
java实现发送邮件工具[通俗易懂]
java实现发送邮件的功能:首先需要导入mail.jar; 然后需要写发送方法: 1、邮箱发送封装工具类:
全栈程序员站长
2022/08/28
6020
java实现发送邮件工具[通俗易懂]
相关推荐
使用 Java 发送邮件
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验