热门标签 | 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】,图片会自动变成附件发送。


推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
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社区 版权所有