热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring框架下发送嵌入图片邮件时遇到的技术挑战与解决方案

在Spring框架中发送嵌入图片的HTML格式邮件时,常遇到技术挑战。一种有效的解决方案是在邮件内容中直接使用``标签来引用图片。此外,还可以通过MimeMessageHelper类的addInline方法将图片作为内联资源添加到邮件中,确保图片能够正确显示。这种方法不仅提高了邮件的可读性,还增强了用户体验。

问题1:spring 发送带图片的html格式的邮件?

解决方法1:直接在发送内容里面添加  


  这种方法是最简单的发送带图片的邮件的方法,但是存在一个问题:有的邮箱会把邮件中有带服务器地址的图片放到垃圾箱,导致邮件收不到,于是继续整。

解决方法2:使用Spring带的 MimeMessageHelper,说不清楚直接看代码:

 1 public class MyClass {
 2 
 3     public static void sendHtmlImgEmail(String subject, String sendHtml, String toUser, String ccUser, String bccUser,
 4             File[] attachment) {
 5         try {
 6             //【1】
 7             sendHtml = sendHtml + "
"; 8 JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); 9 // 设定mail server【2】 10 int port = 25; 11 senderImpl.setHost("邮箱host"); 12 senderImpl.setPort(port); 13 14 // 建立邮件消息,发送简单邮件和html邮件的区别 15 MimeMessage mailMessage = senderImpl.createMimeMessage(); 16 // 注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用multipart模式 17 // 最后一个参数“utf-8”避免邮件中文乱码 问题【3】 18 MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8"); 19 20 // 设置多个抄送地址 21 if (null != ccUser && !ccUser.isEmpty()) { 22 @SuppressWarnings("static-access") 23 InternetAddress[] internetAddressCC = new InternetAddress().parse(ccUser); 24 messageHelper.setCc(internetAddressCC); 25 } 26 // 设置多个密送地址 27 if (null != bccUser && !bccUser.isEmpty()) { 28 @SuppressWarnings("static-access") 29 InternetAddress[] internetAddressBCC = new InternetAddress().parse(bccUser); 30 messageHelper.setBcc(internetAddressBCC); 31 } 32 // 添加附件的内容 33 if (null != attachment && attachment.length != 0) { 34 for (File file : attachment) { 35 DataSource source = new FileDataSource(file); 36 messageHelper.addAttachment(file.getName(), source); 37 } 38 } 39 if (null != toUser && !toUser.isEmpty()) { 40 //这里的分隔符可以自定义 发送给多人【4】 41 String[] toUsers = toUser.split(","); 42 messageHelper.setTo(toUsers); 43 } 44 // 设置收件人,寄件人 45 messageHelper.setFrom("发件人名称"); 46 messageHelper.setSubject(subject); 47 // true 表示启动HTML格式的邮件 48 messageHelper.setText(sendHtml, true); 49 50 //这个 直接在main方法中可以 但是部署后就不行了 报错 找不到路径【5】 51 //String imagePath="src/main/resources/config/emailTag.png"; 52 53 //这个获取项目的完整路径【6】 54 String abPath = new MyClass().getClass().getClassLoader().getResource("/").getPath(); 55 56 String imagePath=abPath+"config/emailTag.png"; 57 58 FileSystemResource img = new FileSystemResource(imagePath); 59 60 //这个是图片的标识 对应上面image标签中的cid【7】 61 messageHelper.addInline("imprtant", img); 62 senderImpl.setUsername("邮箱用户名"); 63 senderImpl.setPassword("你的邮箱密码"); 64 Properties prop = new Properties(); 65 //这个使用outlook 发邮件时候 必须添加 否则报错那个 ,,,忘了【8】 66 prop.put("mail.smtp.starttls.enable", "true"); 67 senderImpl.setJavaMailProperties(prop); 68 // 发送邮件 69 senderImpl.send(mailMessage); 70 System.out.println("邮件发送成功!"); 71 } catch (Exception e) { 72 e.printStackTrace(); 73 } 74 } 75 }

解释:

【1】:注意 cid 这个参数  指图片的标识,看【7】,必须相同

【2】:设置邮件服务器地址跟端口号  注意outlook端口号是 587

【3】:发送中文乱码,添加编码格式 utf-8

【4】:邮件发送给多人

【5】:这个在部署后 找不到路径  有知道的大侠 求赐教

【6】:这个我看了下项目部署在载服务器上的路径,然后想到这个方法获取到绝对路径在加上自己图片在的路径 成功(这个 折腾了好久,一直找不到路径)

【7】:对应【1】

【8】:这个 使用微软邮箱的时候 报错 ,com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

    添加这个属性后就可以

 

总结:

 这个发送邮件方法,可以带附件,发送多个人,添加内嵌图片,Html内容,添加附件未测试,其他都测试通过,但是如果不设置【1】【7】,图片会自动变成附件发送。


推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 探索百度WebFE团队打造的强大HTML5上传插件Web Uploader
    本文将详细介绍由百度WebFE团队开发的Web Uploader,这是一款集成了HTML5与Flash技术的上传组件,以其卓越的用户体验和强大的功能著称。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
author-avatar
手机用户2602901573
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有