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. Day9 数组 冒泡排序及稀疏数组!

    数组 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.(下标从0开始) 数 ...

  2. Shiro精通学习——【第一集:入门】

    入门: main方法直接执行:https://blog.csdn.net/a907691592/article/details/80559904 使用配置文件方式:https://blog.csdn. ...

  3. 3java基础补充(今天和昨天学习内容整理)

    1.java单机项目 2.JavaSE又被称为J2SE,JavaEE和JavaME类同. 3.Java特性(总结) (1)跨平台/可移植性:相同的Java代码可以在任何一个支持的平台(操作系统)上运行 ...

  4. jvm源码解读--17 Java的wait()、notify()学习

    write and debug by 张艳涛 wait()和notify()的通常用法 A线程取得锁,执行wait(),释放锁; B线程取得锁,完成业务后执行notify(),再释放锁; B线程释放锁 ...

  5. element UI table 状态显示:禁用-启用 上架-下架

    vue2.0+elementUI 解决表单上架下架状态的切换 https://blog.csdn.net/weixin_42507803/article/details/81910297 <el ...

  6. centos7网卡配置文件

    HWADDR=00:0c:29:a7:8e:ee TYPE=Ethernet BOOTPROTO=staticDEFROUTE=yes PEERROUTES=yesPEERROUTES=yes IPV ...

  7. Docker 实践及命令梳理

    文档 Docker Reference Documentation Docker 从入门到实践 [中文] 安装 安装 Docker,设置开机启动,然后配置阿里云镜像加速 1. 安装 Docker Do ...

  8. PAT甲级 1112 Stucked Keyboard

    题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 这道题初次写的时候,思路也就是考虑 ...

  9. Run Clojure Script with External Dependencies without leiningen

    The normal way of deploy clojure files is using leiningen. But if we have no leiningen, or the scrip ...

  10. Check Directory Existence in Shell

    The following command in one line can check if a directory exists. You can check the return value (& ...