zoukankan      html  css  js  c++  java
  • 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】,图片会自动变成附件发送。

  • 相关阅读:
    关于javascript with性能的一段阐述
    关于多线程传参问题
    C++ 入门简要笔记
    html中多个title
    关于大学生对抖音的使用情况调查分析报告
    eclipse如何导入lib文件夹下的包
    每周总结
    中文分词——jieba之分词后存入数据库
    软件需求与分析课堂测试十 — 软件设计师案例分析(历年软考题选取)
    2021年秋季学期课程总结及奖励加分
  • 原文地址:https://www.cnblogs.com/xululublog/p/7800194.html
Copyright © 2011-2022 走看看