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】,圖片會自動變成附件發送。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM