参考书籍《张孝详java邮件开发详解》
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
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;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class PictureMessage {
public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {
// TODO Auto-generated method stub
String from = "xxxxxxxxx@sina.com";
String to = "xxxxxxxxx@qq.com";
String subject = "HTML邮件";
String body = "<a href=https://www.baidu.com > <h4>欢迎大家订阅此邮件</h4> </a>"
+ "</br> <img src=\"cid:test_img\">";
/*cid:test_img 表示引用MIME消息中Content-ID属性值为test_img的消息体 数据*/
//创建Session实例对象
Session session = Session.getDefaultInstance(new Properties());
//创建MimeMessage实例对象
MimeMessage msg = new MimeMessage(session);
//设置发件人
msg.setFrom(new InternetAddress(from));
//设置收件人
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
//创建一个子类型为“related”的MimeMultipart对象
MimeMultipart multipart = new MimeMultipart("related");
/**
* 创建一个表示HTML正文的MimeBodyPart对象,
* 并将它加入到前面创建的MimeMultipart对象中
*/
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body,"text/html;charset=gb2312");
multipart.addBodyPart(htmlBodyPart);
/*创建一个表示图片内容的MimeBodyPart对象,
* 并将它加入到前面创建的MimeMultipart对象中*/
MimeBodyPart gifbBodyPart = new MimeBodyPart();
FileDataSource fdsDataSource = new FileDataSource("F:\\个人资料\\照片\\IMG_4373(20181209-182601).jpg");
gifbBodyPart.setDataHandler(new DataHandler(fdsDataSource));
gifbBodyPart.setContentID("test_img");
//上一行代码改成如下语句也可以,建议读者自己想想为什么
// gifbBodyPart.setHeader("Content-ID", "test_img");
/**
* 不必使用下面这条语句设置图片的MIME类型,因为上面使用的JAF框架中的
* DataSource对象能够返回数据源的MIME类型,所以上面的setDataHandler方法能够设置好Content-Type消息头
*/
// gifbBodyPart.setHeader("Content-Type", "image/jpg");
multipart.addBodyPart(gifbBodyPart);
//设置邮件主题
msg.setSubject(subject);
/*将MimeMultipart对象设置为整个邮件的内容,要注意调用saveChanges方法进行更新*/
msg.setContent(multipart);
//保存并生成最终的邮件内容
msg.saveChanges();
//把MimeMessage 对象中的内容写入到文件中
msg.writeTo(new FileOutputStream("D:\\Eclipse\\PictureMessage.eml"));
}
}