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

[Java] JavaMail 发送带图片的 html 格式的邮件的更多相关文章

  1. 接口测试基础——第3篇smtplib发送带图片的邮件

    smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...

  2. [Java] JavaMail 发送 html 格式、带附件的邮件

    本案例演示发送 html 格式,可带附件的邮件发送.发送纯文本邮件的例子可参照上一篇博文JavaMail 简单案例. EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名 ...

  3. 【Mail】JavaMail发送带附件的邮件(二)

    上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...

  4. 使用JavaMail发送带附件的邮件

    所需jar包 链接:http://pan.baidu.com/s/1dFo4cDz 密码:akap 工具类: package com.javamail.utils; import java.util. ...

  5. Django发送带图片和附件的邮件

    最近需要做集团的SRC系统.暂无安全研发,所以只能找我这个小菜兼职开发.系统使用Django框架,在整个过程中,有许多奇特的需求.在某项需求中,需要给厂商用户发送富文本邮件,漏洞详情,这个折腾了一下, ...

  6. java导出word(带图片)

    public class CreateWordDemo { public void createDocContext(String file) throws DocumentException,IOE ...

  7. 新浪微博客户端(40)-使用AFN发送带图片的微博

    DJComposeViewController.m /** 发微博 */ - (void)sendStatusRequest { AFHTTPSessionManager *RequestManage ...

  8. (转)用javamail发送带附件的邮件

    本文转载自:http://redleaf.iteye.com/blog/78217 mail.java 代码 package mail; import java.util.* ; import jav ...

  9. 【代码片段】Python发送带图片的邮件

    # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...

随机推荐

  1. C# 处理图像三种方法对比

    C#本身自带有一定的图像处理能力,即使在不依赖Emgu CV的情况下,也是有很大的潜质的. 不过,最近在处理大量图片时,发现图片数量较少时,处理本身所带来的延时不会让人敏感,但是数量较大时,程序花费大 ...

  2. jQuery分析(1) - 介绍

    前言 web技术高速发展到现在已经出了现非常多的库或框架,库或框架实现方法也是五花八门.现在要实现一个web站点只需要根据自己的业务需求选择js框架即可快速完成.有些框架可以快速满足业务需求,但是有些 ...

  3. ZOJ 1733 Common Subsequence(LCS)

    Common Subsequence Time Limit: 2 Seconds      Memory Limit: 65536 KB A subsequence of a given sequen ...

  4. AdaBoost原理,算法实现

    前言: 当做重要决定时,大家可能综合考虑多个专家而不是一个人的意见.机器学习处理问题也是如此,这就是元算法背后的思路.元算法是对其他算法进行组合的一种方式,前几天看了一个称作adaboost方法的介绍 ...

  5. Binary Tree Inorder Traversal 解题思路 ×

    问题: 非递归中序遍历二叉树 思路: 1.大循环,判断节点是否为空,栈是否为空 2.不为空:点进栈,向左走 3.为空:为空,出栈,读取值,向右走

  6. frameset标签代码实现网站跳转

    js代码1: document.writeln("<frameset rows=\"0, *\">"); document.writeln(&quo ...

  7. Android内的生命周期整理

    1. Android App的生命周期: 2. Application的生命周期: 3. Activity的生命周期: 3.1 Fragment的生命周期: 4. Service的生命周期:5. Br ...

  8. yarn源代码

    Modules-------YARN consists of multiple modules. The modules are listed below as per the directory s ...

  9. 简单学C——第四天

    数组 在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈. 前面我们大致学了 1.定义变量,2.数据的输入与输出,3. ...

  10. 学习Swift -- 继承

    继承 一个类可以继承另一个类的方法(methods),属性(properties)和其它特性.当一个类继承其它类时,继承类叫子类,被继承类叫超类(父类). 在 Swift 中,子类可以调用和访问父类的 ...