1 package javamail;
2
3 import java.io.UnsupportedEncodingException;
4 import java.util.Properties;
5
6 import javax.activation.DataHandler;
7 import javax.activation.FileDataSource;
8 import javax.mail.Message;
9 import javax.mail.Message.RecipientType;
10 import javax.mail.Authenticator;
11 import javax.mail.MessagingException;
12 import javax.mail.Multipart;
13 import javax.mail.PasswordAuthentication;
14 import javax.mail.Session;
15 import javax.mail.Transport;
16 import javax.mail.internet.AddressException;
17 import javax.mail.internet.InternetAddress;
18 import javax.mail.internet.MimeBodyPart;
19 import javax.mail.internet.MimeMessage;
20 import javax.mail.internet.MimeMultipart;
21 import javax.mail.internet.MimeUtility;
22
23 public class TestMail03 {
24 public static void main(String[] args) {
25 try {
26 Properties props = new Properties();
27 props.setProperty("mail.transport.protocol", "smtp");
28 /**
29 * 设置发送邮件的服务器,不同的邮箱服务器不一致,可以在邮箱的帮助中查询
30 */
31 props.setProperty("mail.host", "smtp.126.com");
32 /**
33 * 设置发送服务器验证,一些邮箱需要增加这个验证才能发送邮件
34 */
35 props.setProperty("mail.smtp.auth", "true");
36 /**
37 * 当需要使用Transport.send发送时,需要将用户名和密码设置到Session中
38 */
39 Session session = Session.getDefaultInstance(props,new Authenticator() {
40 /**
41 * 通过Authenticator中 的getPasswordAuthentication的方法来设置邮箱的用户名和密码
42 */
43 @Override
44 protected PasswordAuthentication getPasswordAuthentication() {
45 return new PasswordAuthentication("xiaohui390", "soul-390");
46 }
47 });
48
49 session.setDebug(true);
50
51 Message msg = new MimeMessage(session);
52 /**
53 * 使用MimeUtility.encodeText可以将中文编码
54 */
55 msg.setFrom(new InternetAddress(MimeUtility.encodeText("王辉")+"<xiaohui390@126.com>"));
56 msg.setRecipient(RecipientType.TO,new InternetAddress(MimeUtility.encodeText("阿飞")+"<415519522@qq.com>"));
57 msg.setSubject("一封邮件");
58
59 /**
60 * 创建整个邮件的Multipart,因为邮件的内容已经不仅仅只是纯文本或者纯html文本,而需要添加
61 * 相应的附件,此时就得通过Multipart来创建
62 */
63 Multipart emailPart = new MimeMultipart();
64 /**
65 * Multipart不能直接加入内容,需要通过BodyPart来加入内容,假设有两个附件就需要三个BodyPart
66 * 两个用来存储附件,一个用来存储邮件的正文
67 */
68 MimeBodyPart att1 = new MimeBodyPart();
69 /**
70 * 为第一个附件设置文件,DataHandler是在JAF包中,如果使用的是jdk1.4的版本需要手动下载这个包
71 */
72 att1.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt")));
73 att1.setFileName("1.txt");
74 /**
75 * 创建了第二个附件
76 */
77 MimeBodyPart att2 = new MimeBodyPart();
78 att2.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt")));
79 //要解决中文的问题需要通过一个MimeUtility这个类来编码中文
80 att2.setFileName(MimeUtility.encodeText("你好.txt"));
81
82 MimeBodyPart content = new MimeBodyPart();
83 /**
84 * 由于文件的正文还有图片和内容,所以也需要通过Multipart来创建
85 */
86 MimeMultipart contentMultipart = new MimeMultipart();
87 /**
88 * 然后再创建相应的BodyPart来设置内容
89 */
90 MimeBodyPart imgBody = new MimeBodyPart();
91 /**
92 * 创建了正文中的图片内容
93 */
94 imgBody.setDataHandler(new DataHandler(new FileDataSource("d:/02.jpg")));
95 /**
96 * 为这个图片设置一个id,在正文中可以通过cid:xxx来访问
97 */
98 imgBody.setContentID("smile");
99
100 MimeBodyPart htmlBody = new MimeBodyPart();
101 htmlBody.setContent("<h1>这个是一个带有附件的图片</h1><img src='cid:smile'/>", "text/html;charset=utf-8");
102
103
104 contentMultipart.addBodyPart(imgBody);
105 contentMultipart.addBodyPart(htmlBody);
106 //完成了邮件正文的设置
107 content.setContent(contentMultipart);
108
109 /**
110 * 设置邮件的信息
111 */
112 //添加第一个附件
113 emailPart.addBodyPart(att1);
114 //添加第二个附件
115 emailPart.addBodyPart(att2);
116 //添加邮件正文
117 emailPart.addBodyPart(content);
118 //设置邮件的信息
119 msg.setContent(emailPart);
120
121 Transport.send(msg);
122 } catch (AddressException e) {
123 e.printStackTrace();
124 } catch (MessagingException e) {
125 e.printStackTrace();
126 } catch (UnsupportedEncodingException e) {
127 e.printStackTrace();
128 }
129
130 }
131 }

带有附件及图片正文的JavaMail邮件发送的更多相关文章

  1. javaMail 邮件发送和接收示例,支持正文图片、html、附件(转)

    转自:https://blog.csdn.net/star_fly4/article/details/52037587 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文 ...

  2. Spring的javaMail邮件发送(带附件)

    项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...

  3. javaMail邮件发送功能(多收件人,多抄送人,多密送人,多附件)

    private Session session; private Transport transport; private String mailHost = ""; privat ...

  4. JavaMail邮件发送不成功的那些坑人情况及分析说明

    [我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言   JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...

  5. javamail邮件发送例子

    public class EmailTask{        // Session used by the javamail classes    private Session session;   ...

  6. JavaMail 邮件发送

    jar包部署 /** * 通过SMTP进行邮件集成 */ public class CmpSendMail { // 邮件发送服务器主机 private final static String HOS ...

  7. 应用层之E-mail服务及javaMail邮件发送的知识总结

    关于Email服务你需要知道的知识点: 概述: 今天来介绍一下应用层的电子邮件服务,我们每天几乎都在用,电子邮件(email)服务也是一种基于C/S模式的服务,它采用的是一种"存储-转发&q ...

  8. javaMail邮件发送的简单实现

    package com.test.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.Ses ...

  9. (转)JavaMail邮件发送-发送一个文本邮件和一些问题说明

    需要下载的JAR包: JavaMail:http://www.oracle.com/technetwork/java/javamail/index.html JAF:http://www.oracle ...

随机推荐

  1. vue(21)初识Vuex

    Vuex是做什么的? 官方解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式. 它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. Vuex ...

  2. HDFS学习总结之安装

    HDFS linux安装总结(基于hadoop-2.6.0-cdh5.7.0 伪分部安装) 1.jdk安装 1) 直接下载jdk包放到安装目录即可(jdk-8u131-linux-x64.tar.gz ...

  3. 【贪心+排序】凌乱的yyy / 线段覆盖 luogu-1803

    题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...

  4. 我的第一个HarmonyOS 应用

    第一步:去开发者官网下载IDE:https://developer.harmonyos.com/cn/develop   并根据文档安装 DevEco Studio 第二步.启动IDE并创建自己的第一 ...

  5. 爬取千千小说 -- xpath

    今天以其中一本小说为例,讲一下下载小说的主体部分,了解正常的爬取步骤,用到的是request和xpath. 爬取数据三步走:访问url -->爬取数据 -->保存数据 一.访问千千小说网址 ...

  6. JMX远程连接JVM

    -Dcom.sun.management.jmxremote :允许使用JMX远程管理 -Dcom.sun.management.jmxremote.port=9999 :JMX远程连接端口 -Dco ...

  7. LAMP和LNMP环境搭建的艰辛历程

    目录 1. LAMP环境的搭建 1. Apache 安装apache遇到的问题 2. mysql 登录mysql的方法 3. PHP 2. Lnmp环境的搭建 1. nginx 2. PHP 3. 配 ...

  8. CS229 斯坦福大学机器学习复习材料(数学基础) - 线性代数

    CS229 斯坦福大学机器学习复习材料(数学基础) - 线性代数 线性代数回顾与参考 1 基本概念和符号 1.1 基本符号 2 矩阵乘法 2.1 向量-向量乘法 2.2 矩阵-向量乘法 2.3 矩阵- ...

  9. 小白学vue第四天,从入门到放弃(vue指令的使用加高阶函数)

    v-on修饰符的使用 .stop 阻止事件冒泡 调用  stopPropagation() .prevent 阻止默认事件 调用 event.preventDefault() .keyCode 键盘事 ...

  10. Java练习——加减乘除计算器实现

    Java练习--计算器(加减乘除)  package method; import java.util.Scanner; /*  写一个计算器 实现加减乘除四个功能   并且能够用循环接收新的数据,通 ...