zoukankan      html  css  js  c++  java
  • [Java] JavaMail 发送带图片的 html 格式的邮件

    JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的。

    发送带附件的邮件可参考 JavaMail 发送 html 格式、带附件的邮件

    发送纯文本的邮件可参照 JavaMail 简单案例

    具体例子

    EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名、用户名、密码、发送人邮箱、收件人邮箱、邮件主题、html 格式的内容、图片的路径,便可发送一份内置图片的邮件。在创建 MimeMultipart 时, 需要传入参数 related,并在正文中声明图片的位置。

    SendEmailDemo, 演示发送邮件。

    EmailHelper.java

      1 package mail;
      2 
      3 import java.util.Properties;
      4 
      5 import javax.activation.DataHandler;
      6 import javax.activation.DataSource;
      7 import javax.activation.FileDataSource;
      8 import javax.mail.BodyPart;
      9 import javax.mail.Message;
     10 import javax.mail.MessagingException;
     11 import javax.mail.Multipart;
     12 import javax.mail.PasswordAuthentication;
     13 import javax.mail.Session;
     14 import javax.mail.Transport;
     15 import javax.mail.internet.AddressException;
     16 import javax.mail.internet.InternetAddress;
     17 import javax.mail.internet.MimeBodyPart;
     18 import javax.mail.internet.MimeMessage;
     19 import javax.mail.internet.MimeMultipart;
     20 
     21 public class EmailHelper {
     22     
     23     private String host;
     24     private String username;
     25     private String password;
     26     private String from;
     27     
     28     private String to;
     29     private String subject;
     30     private String htmlContent;
     31     private String imagePath;
     32     
     33     public EmailHelper(String host, String username, String password, String from) throws AddressException, MessagingException{
     34         this.host = host;
     35         this.username = username;
     36         this.password = password;
     37         this.from = from;
     38     }
     39     
     40     public void sendWithImage() throws Exception {
     41 
     42         Properties props = new Properties();
     43         props.put("mail.smtp.auth", "true");
     44         props.put("mail.smtp.host", host);
     45 
     46         final String username1 = username;
     47         final String password1 = password;
     48 
     49         Session session = Session.getInstance(props, new javax.mail.Authenticator() {
     50             protected PasswordAuthentication getPasswordAuthentication() {
     51                 return new PasswordAuthentication(username1, password1);
     52             }
     53         });
     54 
     55         Message message = new MimeMessage(session);
     56 
     57         message.setFrom(new InternetAddress(from));
     58 
     59         message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
     60 
     61         message.setSubject(subject);
     62 
     63         Multipart multipart = new MimeMultipart("related");
     64 
     65         System.out.println(" html ");
     66         BodyPart htmlPart = new MimeBodyPart();
     67         htmlContent = "<img src="cid:image">" + htmlContent;
     68         htmlPart.setContent(htmlContent, "text/html");
     69         multipart.addBodyPart(htmlPart);
     70         
     71         System.out.println(" image ");
     72         System.out.println("image path : " + imagePath);
     73         BodyPart imgPart = new MimeBodyPart();
     74         DataSource fds = new FileDataSource(this.imagePath);
     75 
     76         imgPart.setDataHandler(new DataHandler(fds));
     77         imgPart.setHeader("Content-ID", "<image>");
     78 
     79         multipart.addBodyPart(imgPart);
     80         message.setContent(multipart);
     81         Transport.send(message);
     82 
     83         System.out.println(" Sent -| ");
     84     }
     85 
     86     public void setTo(String to) {
     87         this.to = to;
     88     }
     89 
     90     public void setSubject(String subject) {
     91         this.subject = subject;
     92     }
     93 
     94     public void setHtmlContent(String htmlContent) {
     95         this.htmlContent = htmlContent;
     96     }
     97     
     98     public String getImagePath() {
     99         return imagePath;
    100     }
    101 
    102     public void setImagePath(String imagePath) {
    103         this.imagePath = imagePath;
    104     }
    105 }

    SendEmailDemo.java

     1 public class SendEmailDemo {
     2     
     3     public static void main(){
     4         
     5         String host = "smtp.163.com";        // use your smtp server host
     6 
     7         final String username = "sender@163.com"; // use your username
     8         final String password = "password";   // use your password
     9 
    10         String from = "sender@163.com";     // use your sender email address
    11 
    12         String to = "reciever@foxmail.com";  // use your reciever email address
    13         try {
    14             EmailHelper emailHelper = new EmailHelper(host, username, password, from);
    15             emailHelper.setTo(to);
    16             emailHelper.setSubject("subject ttt test");
    17             emailHelper.setHtmlContent("<h1> This is html </h1>");
    18             emailHelper.setImagePath("/Users/grs/Documents/Java/mavenEmail/test/src/main/resource/promises.png");
    19             
    20             emailHelper.send();
    21             
    22         } catch (Exception e) {
    23             e.printStackTrace();
    24         }
    25     }
    26 }

    参考资料

    JavaMail API - Sending Email With Inline Imagess

  • 相关阅读:
    在X++中使用IoC/DI模式应对不断变化的客户需求
    Predicate<T>与Func<T, bool>泛型委托
    Windows Live Writer插件:在WLW中插入语法高亮代码
    学习C#和.NET的资源
    C#中事件的动态调用
    2008年全国软件工程大会论文集
    C#基础:接口(二)
    【转载】"变化"、"复用"、"抽象"、"稳定" 影响着软件设计模式,架构,开发方法
    【领域驱动设计】.NET实践:实体、值对象和数据传输对象
    RSS订阅之基本使用
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/6049412.html
Copyright © 2011-2022 走看看