[Java] JavaMail 发送带图片的 html 格式的邮件
JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的。
发送带附件的邮件可参考JavaMail 发送 html 格式、带附件的邮件。
发送纯文本的邮件可参照 JavaMail 简单案例。
具体例子
EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名、用户名、密码、发送人邮箱、收件人邮箱、邮件主题、html 格式的内容、图片的路径,便可发送一份内置图片的邮件。在创建 MimeMultipart 时, 需要传入参数 related,并在正文中声明图片的位置。
SendEmailDemo, 演示发送邮件。
EmailHelper.java
- package mail;
- import java.util.Properties;
- import javax.activation.DataHandler;
- import javax.activation.DataSource;
- import javax.activation.FileDataSource;
- import javax.mail.BodyPart;
- import javax.mail.Message;
- import javax.mail.MessagingException;
- import javax.mail.Multipart;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.AddressException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeBodyPart;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMultipart;
- public class EmailHelper {
- private String host;
- private String username;
- private String password;
- private String from;
- private String to;
- private String subject;
- private String htmlContent;
- private String imagePath;
- public EmailHelper(String host, String username, String password, String from) throws AddressException, MessagingException{
- this.host = host;
- this.username = username;
- this.password = password;
- this.from = from;
- }
- public void sendWithImage() throws Exception {
- Properties props = new Properties();
- props.put("mail.smtp.auth", "true");
- props.put("mail.smtp.host", host);
- final String username1 = username;
- final String password1 = password;
- Session session = Session.getInstance(props, new javax.mail.Authenticator() {
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username1, password1);
- }
- });
- Message message = new MimeMessage(session);
- message.setFrom(new InternetAddress(from));
- message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
- message.setSubject(subject);
- Multipart multipart = new MimeMultipart("related");
- System.out.println(" html ");
- BodyPart htmlPart = new MimeBodyPart();
- htmlContent = "<img src=\"cid:image\">" + htmlContent;
- htmlPart.setContent(htmlContent, "text/html");
- multipart.addBodyPart(htmlPart);
- System.out.println(" image ");
- System.out.println("image path : " + imagePath);
- BodyPart imgPart = new MimeBodyPart();
- DataSource fds = new FileDataSource(this.imagePath);
- imgPart.setDataHandler(new DataHandler(fds));
- imgPart.setHeader("Content-ID", "<image>");
- multipart.addBodyPart(imgPart);
- message.setContent(multipart);
- Transport.send(message);
- System.out.println(" Sent -| ");
- }
- public void setTo(String to) {
- this.to = to;
- }
- public void setSubject(String subject) {
- this.subject = subject;
- }
- public void setHtmlContent(String htmlContent) {
- this.htmlContent = htmlContent;
- }
- public String getImagePath() {
- return imagePath;
- }
- public void setImagePath(String imagePath) {
- this.imagePath = imagePath;
- }
- }
SendEmailDemo.java
- public class SendEmailDemo {
- public static void main(){
- String host = "smtp.163.com"; // use your smtp server host
- final String username = "sender@163.com"; // use your username
- final String password = "password"; // use your password
- String from = "sender@163.com"; // use your sender email address
- String to = "reciever@foxmail.com"; // use your reciever email address
- try {
- EmailHelper emailHelper = new EmailHelper(host, username, password, from);
- emailHelper.setTo(to);
- emailHelper.setSubject("subject ttt test");
- emailHelper.setHtmlContent("<h1> This is html </h1>");
- emailHelper.setImagePath("/Users/grs/Documents/Java/mavenEmail/test/src/main/resource/promises.png");
- emailHelper.send();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
参考资料
JavaMail API - Sending Email With Inline Imagess
[Java] JavaMail 发送带图片的 html 格式的邮件的更多相关文章
- 接口测试基础——第3篇smtplib发送带图片的邮件
smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...
- [Java] JavaMail 发送 html 格式、带附件的邮件
本案例演示发送 html 格式,可带附件的邮件发送.发送纯文本邮件的例子可参照上一篇博文JavaMail 简单案例. EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名 ...
- 【Mail】JavaMail发送带附件的邮件(二)
上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...
- 使用JavaMail发送带附件的邮件
所需jar包 链接:http://pan.baidu.com/s/1dFo4cDz 密码:akap 工具类: package com.javamail.utils; import java.util. ...
- Django发送带图片和附件的邮件
最近需要做集团的SRC系统.暂无安全研发,所以只能找我这个小菜兼职开发.系统使用Django框架,在整个过程中,有许多奇特的需求.在某项需求中,需要给厂商用户发送富文本邮件,漏洞详情,这个折腾了一下, ...
- java导出word(带图片)
public class CreateWordDemo { public void createDocContext(String file) throws DocumentException,IOE ...
- 新浪微博客户端(40)-使用AFN发送带图片的微博
DJComposeViewController.m /** 发微博 */ - (void)sendStatusRequest { AFHTTPSessionManager *RequestManage ...
- (转)用javamail发送带附件的邮件
本文转载自:http://redleaf.iteye.com/blog/78217 mail.java 代码 package mail; import java.util.* ; import jav ...
- 【代码片段】Python发送带图片的邮件
# coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...
随机推荐
- C# 处理图像三种方法对比
C#本身自带有一定的图像处理能力,即使在不依赖Emgu CV的情况下,也是有很大的潜质的. 不过,最近在处理大量图片时,发现图片数量较少时,处理本身所带来的延时不会让人敏感,但是数量较大时,程序花费大 ...
- jQuery分析(1) - 介绍
前言 web技术高速发展到现在已经出了现非常多的库或框架,库或框架实现方法也是五花八门.现在要实现一个web站点只需要根据自己的业务需求选择js框架即可快速完成.有些框架可以快速满足业务需求,但是有些 ...
- ZOJ 1733 Common Subsequence(LCS)
Common Subsequence Time Limit: 2 Seconds Memory Limit: 65536 KB A subsequence of a given sequen ...
- AdaBoost原理,算法实现
前言: 当做重要决定时,大家可能综合考虑多个专家而不是一个人的意见.机器学习处理问题也是如此,这就是元算法背后的思路.元算法是对其他算法进行组合的一种方式,前几天看了一个称作adaboost方法的介绍 ...
- Binary Tree Inorder Traversal 解题思路 ×
问题: 非递归中序遍历二叉树 思路: 1.大循环,判断节点是否为空,栈是否为空 2.不为空:点进栈,向左走 3.为空:为空,出栈,读取值,向右走
- frameset标签代码实现网站跳转
js代码1: document.writeln("<frameset rows=\"0, *\">"); document.writeln(&quo ...
- Android内的生命周期整理
1. Android App的生命周期: 2. Application的生命周期: 3. Activity的生命周期: 3.1 Fragment的生命周期: 4. Service的生命周期:5. Br ...
- yarn源代码
Modules-------YARN consists of multiple modules. The modules are listed below as per the directory s ...
- 简单学C——第四天
数组 在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈. 前面我们大致学了 1.定义变量,2.数据的输入与输出,3. ...
- 学习Swift -- 继承
继承 一个类可以继承另一个类的方法(methods),属性(properties)和其它特性.当一个类继承其它类时,继承类叫子类,被继承类叫超类(父类). 在 Swift 中,子类可以调用和访问父类的 ...