springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱

这篇具有很好参考价值的文章主要介绍了springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、设置系统值

System.setProperty(“mail.mime.splitlongparameters”, “false”);

2、 在创建对象的时候定义编码格式(utf-8):

MimeMessageHelper helper = new MimeMessageHelper(mes, true, “utf-8”);

3、 其次,在添加附件的时候,附件名是需要定义编码的

helper.addAttachment(MimeUtility.encodeWord(附件名,“utf-8”,“B”), 你的附件对象);
————————————————
版权声明:本文为CSDN博主「往事不堪回首…」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq3892997/article/details/126013828

//生成的数据通过excel附件的方式,进行发送。
	public void sendMail(String mailFrom, String mailTo, String title, String content, File file) throws Exception {
		System.setProperty("mail.mime.splitlongparameters", "false");//1.设置系统值 ---处理文件名乱码
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper msg = new MimeMessageHelper(mimeMessage, true, "utf-8");//2.在创建对象的时候定义编码格式(utf-8)
		msg.addAttachment(MimeUtility.encodeWord(excelName,"utf-8","B"), file); //3.在添加附件的时候,附件名是需要定义编码的 ---以上3条都得有,否则文件名乱码
		msg.setFrom(mailFrom);
		msg.setTo(mailTo);
		msg.setSubject(title);
		msg.setText(content, true);
		mailSender.send(mimeMessage);
	}

工具类


@Component
@Slf4j
/**
 * 发送邮件工具类
 * @author ZMH
 * @date 7/7/2023 2:03 下午
 */
public class EmailUtils {

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 发送纯文本邮件
     * @author ZMH
     * @date 7/7/2023 10:37 上午
     * @param subject 邮件主题
     * @param text 邮件内容
     * @param targetEmail 目标邮件地址
     * @param sourceEmail 源邮件地址
     * @return void
     */
    public void sendTextEmail (String subject,String text,String targetEmail,String sourceEmail ){
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject(subject);//主题
        mailMessage.setText(text);//内容
        if (StringUtils.isNotBlank(targetEmail) && targetEmail.split(",").length>1){
            mailMessage.setTo(targetEmail.split(","));//多个号码发送,该发送会将目标邮件分组发送
        }else {
            mailMessage.setTo(targetEmail);
        }
        mailMessage.setFrom(sourceEmail);
        javaMailSender.send(mailMessage);
    }


    /**
     * 发送文本邮件和附件
     * @author ZMH
     * @date 7/7/2023 2:01 下午
     * @param subject 主题
     * @param text 文本内容
     * @param targetEmail 目标邮件
     * @param sourceEmail 源邮件
     * @param annexList 附件List
     * @param anneNameList 附件名称List
     * @return void
     */
    public void sendTextAndAnnexEmail(String subject,String text,String targetEmail,String sourceEmail,
                                      String personal, List<File> annexList,List<String> anneNameList ) throws MessagingException {
        sendSeniorEmail(subject,null,false,text,targetEmail,sourceEmail,personal,annexList,anneNameList);
    }




    /**
     * 发送邮件根据HTML模本文件
     * @author ZMH
     * @date 7/7/2023 11:16 上午
     * @param subject 主题
     * @param content 内容
     * @param targetEmail 目标邮件
     * @param sourceEmail 源邮件
     * @return void
     */
    public void sendHTMLEmail(String subject,String content,String targetEmail,String sourceEmail,String personal) throws MessagingException {
        sendSeniorEmail(subject,content,true,"",targetEmail,sourceEmail,personal,null,null);
    }

    /**
     * 发送模版文件并包含附件
     * @author ZMH
     * @date 7/7/2023 11:20 上午
     * @param subject 主题
     * @param content 内容
     * @param targetEmail 目标邮件
     * @param sourceEmail 源邮件
     * @param annexList 附件
     * @param annexNameList 附件名称
     * @return void
     */
    public void sendHTMLAndAnnexEmail(String subject,String content,String targetEmail,
                              String sourceEmail,String personal,List<File> annexList,List<String> annexNameList) throws MessagingException {
        sendSeniorEmail(subject,content,true,"",targetEmail,sourceEmail,personal,annexList,annexNameList);
    }



    /**
     * 发送高级邮件
     * @author ZMH
     * @date 7/7/2023 11:26 上午
     * @param subject 主题
     * @param concent content
     * @param targetEmail 目标邮箱
     * @param sourceEmail 源邮箱
     * @param annexList 附件
     * @param annexNameList 附件名称
     * @return void
     */
    private void sendSeniorEmail(String subject, String concent, Boolean isHtml, String txet, String targetEmail,
                                 String sourceEmail,String personal, List<File> annexList, List<String> annexNameList) throws MessagingException{
        System.setProperty("mail.mime.splitlongparameters", "false");//1.设置系统值 ---处理文件名乱码
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true,"utf-8");
        helper.setSubject(subject);//邮件主题
        try {
            helper.setFrom(sourceEmail,personal);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        if (StringUtils.isNotBlank(targetEmail) && targetEmail.split(",").length>1){
            helper.setTo(targetEmail.split(","));//多个号码发送,该发送为分组发送
        }else {
            helper.setTo(targetEmail);
        }
        if (isHtml) {
            //String absolutePath = htmlFile.getAbsolutePath();
            //String htmlModel = FileUtil.getStringByFile(absolutePath);
             concent = "<!DOCTYPE html>\n" +
                    "<html lang=\"en\">\n" +
                    "<head>\n" +
                    "    <meta charset=\"UTF-8\">\n" +
                    "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
                    "    <title></title>\n" +
                    "</head>\n" +
                    "<body>\n" +
                    "  <div>" + concent + "</div>\n" +
                    "</body>\n" +
                    "</html>";
            helper.setText(concent,true);
        }else {
            helper.setText(txet,false);
        }
        helper.setSentDate(new Date());//邮件发送时间
        if (!CollectionUtils.isEmpty(annexList)){
            if (CollectionUtils.isEmpty(annexNameList)){
                for (File file : annexList) {
                    annexNameList.add(file.getName());
                }
            }else {
                if (annexList.size()!= annexNameList.size()){
                    throw new MessagingException("附件名称和附件条次不一致");
                }
            }
            try {
                for (int i = 0; i < annexList.size(); i++) {
                    helper.addAttachment(MimeUtility.encodeWord(annexNameList.get(i), "utf-8", "B"), annexList.get(i));
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        javaMailSender.send(message);
    }


}

yml配置文件增加

spring:
  mail:
    username: 邮箱号码
    password: 授权码
    host: smtp.qq.com
    port: 465
    properties:
      mail:
        smtp:
          auth: true
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          starttls:
            enable: true
          ssl:
            enable: true

pom.xml 增加文章来源地址https://www.toymoban.com/news/detail-615687.html

	  <!-- SpringEmail -->
	  <dependency>
		  <groupId>org.springframework.boot</groupId>
		  <artifactId>spring-boot-starter-mail</artifactId>
	  </dependency>

到了这里,关于springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合Javamail实现邮件发送

    博客主页:踏风彡的博客 博主介绍:一枚在学习的大学生,希望在这里和各位一起学习。 所属专栏:SpringBoot学习笔记 文章创作不易,期待各位朋友的互动,有什么学习问题都可在评论区留言或者私信我,我会尽我所能帮助大家。 ​ 发邮件对于咱们的Java来说是一个基本的功

    2024年02月06日
    浏览(45)
  • SpringBoot,使用JavaMailSender发送邮件(含源码)。

        本文主要讲解使用JavaMailSender发送邮件,并给出对应的参考案例、源码。 1、使用的依赖jar包      JavaMailSender发送邮件,只需要 \\\"spring-boot-starter-mail\\\" jar包就可以。考虑到邮件发送时,使用 Hutool工具生成Excel文件做为附件,因此这里也将 Hutool工具包依赖添加上。 2、 appl

    2024年02月07日
    浏览(45)
  • Springboot 使用JavaMailSender发送邮件 + Excel附件

    目录 1.生成Excel表格 1.依赖设置 2.代码: 2.邮件发送 1.邮件发送功能实现-带附件  2.踩过的坑 1.附件名中文乱码问题 3.参考文章: 需求描述:项目审批完毕后,需要发送邮件通知相关人员,并且要附带数据库表生成的Excel表格,这就要求不光是邮件发送功能,还要临时生成E

    2024年02月07日
    浏览(45)
  • 一、Postfix[安装与配置、smtp认证、Python发送邮件以及防垃圾邮件方法、使用腾讯云邮件服务]

    Debian 11 apt install postfix 解释:搭建真实的邮件服务器需要在DNS提供商那里配置下面的dns 配置A记录 mail.www.com - 1.x.x.x 配置MX记录 www.com - mail.www.com 解释:按照上面的配置通常邮件格式就是 admin@www.com 其通过www.com的MX记录找到mail.www.com再通过其A记录来找到对应服务器完成通讯 解

    2024年02月15日
    浏览(53)
  • SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件

    本文主要是【Rabbitmq】——SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句:狠狠沉淀,顶峰相见 测试结果:此时指定邮箱已收到验

    2024年02月04日
    浏览(44)
  • springboot(java)使用javamail实现邮件的接收、转发、发送、清除

    最近在弄邮件相关的功能,被搞的头大,很多找的方法根本不知道该怎么往下走,就目前为止, 经过各种的碰壁和失败,就整理出来如何使用javamail实现邮件的接收、转发、发送、清除 不单单是分享,也为我后续查找更方便做一个记录 在正式发送邮件之前,我们应该对邮件

    2024年02月04日
    浏览(43)
  • Prometheus+Grafana+AlertManager监控SpringBoot项目并发送邮件告警通知

    Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter Docker安装并配置cAdvisor Docker安装并运行Alertmanager 新建项目,引入依赖 新建接口,运行程序 Prometheus配置文件中已添加该项目地址,运行后到Prometheus页面中查看连接情况 成功 引入依赖 新增push接口,用于

    2024年02月11日
    浏览(44)
  • 一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 标题 一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码) 一张思维导图带你学会Springboot创

    2024年02月14日
    浏览(89)
  • Java发送邮件一行代码解决

    今天博主带来一期超详细的邮件发送实操内容,希望能get到您的点赞!话不多说,直接进入正题。 在实践开始前,这里需要提到 Hutool ,Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率的工具类。 那么现在正式进入实战!首先创

    2024年02月02日
    浏览(54)
  • java发送邮件报SSL安全异常解决

    2.运行程序,会有如下提示Enter certificate to add to trusted keystore or \\\'q\\\' to quit: [1] 按1再按回车 3.然后在你的项目路径下生成了一个jssecacerts文件 4.复制文件的路径,在发送邮件代码之前设置安全证书的位置,我的如下: 5.然后运行发送邮件代码就可以正常发送了!

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包