[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 ...
随机推荐
- java.lang.InstantiationError: sun.net.ftp.FtpClient
发送邮件功能.本地可以,测试环境上报错.是JDK 版本导致的,,本地1.6 测试环境JDK 1.7 解决办法: 1.测试环境重新配置jdk 1.6 环境.. 2.安装 JDK 1.7 ...
- 跨域的小小总结:js跨域及跨域的几种解决方法
一.什么是跨域?? js跨域请求就是使用js访问iframe里的不同域名下的页面内容,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同的域的iframe框架中的数据.即只要域名.协议. ...
- C# 匿名表达式(Lambda表达式)
匿名表达式 这次来说说Lambda表达式吧,反正也简单,我也不像其他高手那样强调来强调去,只讲一下方法: 准备条件如下: 第一,匿名表达式必须存在与之对应的委托. 只要存在相对应的委托就可以了.接下来 ...
- ios专题 - OCUnit
OCUnit是集成在Xcode开发环境的单元测试框架:OCUnit运行必须包含SenTestingKit.framework这个库: 针对需要测试的类,每个类写出自己的TestCase,独立组织一个文 ...
- JavaScript Invalid Date Verify
if ( Object.prototype.toString.call(d) === "[object Date]" ) { // it is a date if ( isNaN( ...
- [Neural Networks] (Convolutional Neural Networks)CNN-卷积神经网络学习
参考:http://blog.csdn.net/zouxy09/article/details/8781543 ( 但其中有部分错误) http://ufldl.stanford.edu/wiki/i ...
- 【随记】SQL Server连接字符串参数说明
废话不多说,请参见 SqlConnection.ConnectionString .
- DexIndexOverflowException: Cannot merge new index 66080 into a non-jumbo instruction!
问题 该问题是方法数超过了65536(DEX 64K problem),无法编译成单个dex文件. 解决方案 谷歌官方给出的解决方案 android { compileSdkVersion 21 bu ...
- c++构造函数谁先执行的问题
看到网上一哥们的帖子 http://blog.csdn.net/maray/article/details/7761709 东西不多就转发了 1 #include <iostream> u ...
- C语言学习总结(四) 剩余内容
第六章.剩余内容 (预处理指令,宏定义,条件编译,文件操作) 预处理指令 简单的来说就是在程序编译之前需要做的事情 1.宏定义 概念: 是一个替换代码的预处理指令,可以在编译之前进行代码替换(宏展开, ...