Spring 发送内嵌图片的邮件 遇到的问题
Posted 我叫许路路,我是菜鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 发送内嵌图片的邮件 遇到的问题相关的知识,希望对你有一定的参考价值。
问题1:spring 发送带图片的html格式的邮件?
解决方法1:直接在发送内容里面添加
<img src="http://www.rgagnon.com/images/jht.gif">
这种方法是最简单的发送带图片的邮件的方法,但是存在一个问题:有的邮箱会把邮件中有带服务器地址的图片放到垃圾箱,导致邮件收不到,于是继续整。
解决方法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 + "<html><body><hr/><img src=\"cid:imprtant\"/></body></html>"; 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】,图片会自动变成附件发送。
以上是关于Spring 发送内嵌图片的邮件 遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章
javamail: UrlDataSource获取网络文件作为邮件的附件|javamail发送二进制流附件的问题