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

  • 相关阅读:
    在多租户(容器)数据库中如何创建PDB:方法6 DBCA本地克隆PDB
    在多租户(容器)数据库中如何创建PDB:方法5 DBCA远程克隆PDB
    1级搭建类104-Oracle 12cR2 单实例 FS(阿里云)公开
    在多租户(容器)数据库中如何创建PDB:方法4 克隆远程Non-CDB
    在多租户(容器)数据库中如何创建PDB:方法3 克隆远程PDB
    番外:克隆本地PDB中其他参数和子句的说明
    在多租户(容器)数据库中如何创建PDB:方法2 克隆本地PDB
    Oracle Solaris 10 重启后提示 Bad PBR sig
    在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB
    0级搭建类009-Fedora 30 安装(F30) 公开
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/6049412.html
Copyright © 2011-2022 走看看