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

时间: 2024-10-10 23:32:38

Spring 发送内嵌图片的邮件 遇到的问题的相关文章

java程序发送内嵌图片、带附件邮件

package mail; import java.io.UnsupportedEncodingException;import java.util.Properties; import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingExc

java发送内嵌图片邮件

前言: 博客系统中需要邮件服务的功能,以前写过类似的功能,不过功能太简单了,仅仅是发送文本内容,现在尝试一下发送内嵌图片邮件! 准备工作: 请参考:http://www.cnblogs.com/hujunzheng/p/4792831.html 整体效果: 发送端:网易邮箱:接收端:qq邮箱. 1.web前端 2.在网易邮箱“已发送”中可以看见通过java代码发送的邮件 3.同样在qq邮箱中也可以看到这样的效果 实现过程: 1.web前端(bootstrap布局) <form action=&quo

C#发送内置图片的html格式邮件的代码

将写内容过程经常用的内容段备份一次,下面的内容是关于C#发送内置图片的html格式邮件的内容,应该对码农们也有用处.MailMessage m = new MailMessage();m.Subject = "html email with embedded image coming!"; string htmlBody = "<html><body><h1>Picture</h1><br><img src=&

java实现发送邮件可多个附件内嵌图片-commons-email使用

前言 java实现发邮件功能,其实SUN在javaEE的开发包里给我们提供了相关的工具,利用 mail.jar 和 activation.jar可以实现这个功能,n年前包括我第一次实习的时候项目上也是用SUN提供的包实现的,实现起来比较繁琐麻烦,今天我们就用Apache的工具包commons-email包来实现发送带邮件和内嵌图片的功能,它是把前者做了下封装,使用起来更加的简易方便明了,所以我们使用commons-email来实现发送邮件的功能,必须也引入mail.jar,activation.

原生js实现tab选项卡里内嵌图片滚动特效代码

<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><title>原生js实现tab选项卡里内嵌图片滚动特效代码</title><meta name="keywords" content="原生js实现tab选项卡里内嵌图片滚动特效代码" /><meta name=&

生成带内嵌图片的二维码

在博问上看到有同学在问如何实现一个带内嵌图片的二维码,所以准备记录下来,供同学们参考. 1.首先准备一个用于内嵌的图片. 2.既然生成二维码码,那肯定需要将什么样的内容生成二维码,这里我用http://www.baidu.com作为生成二维码的字符串 private string QcodeSource { get { return "http://www.baidu.com"; } } 3.我们来看看根据QcodeSource生成二维码的方法,这里返回Byte[].PS:这里用了 G

Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动

之前在Spring Boot启动过程(二)提到过createEmbeddedServletContainer创建了内嵌的Servlet容器,我用的是默认的Tomcat. private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; ServletContext localServletContext = getServ

Spring Boot 内嵌servlet容器的Servlets +Filters + listeners

一:servlet (1)启动类 @SpringBootApplication @ServletComponentScan public class Application { public static void main(String[] args){ SpringApplication.run(Application.class, args); } } 启动类用@ServletComponentScan注解标注 (2)继承HttpServlet @WebServlet(name = "we

lumisoft.net 邮件管理系列文章 - 如何判断附件为内嵌式还是附加式

如果要区分邮件里面的附件是内嵌图片附件还是真正的附件,那么可以通过下面代码进行判断,如果是MIME_DispositionTypes.Attachment的就是普通附件,MIME_DispositionTypes.Inline的就是内嵌正文的附件. entity.ContentDisposition.DispositionType == MIME_DispositionTypes.Attachment