带有附件及图片正文的JavaMail邮件发送
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邮件发送的更多相关文章
- javaMail 邮件发送和接收示例,支持正文图片、html、附件(转)
转自:https://blog.csdn.net/star_fly4/article/details/52037587 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文 ...
- Spring的javaMail邮件发送(带附件)
项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...
- javaMail邮件发送功能(多收件人,多抄送人,多密送人,多附件)
private Session session; private Transport transport; private String mailHost = ""; privat ...
- JavaMail邮件发送不成功的那些坑人情况及分析说明
[我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言 JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...
- javamail邮件发送例子
public class EmailTask{ // Session used by the javamail classes private Session session; ...
- JavaMail 邮件发送
jar包部署 /** * 通过SMTP进行邮件集成 */ public class CmpSendMail { // 邮件发送服务器主机 private final static String HOS ...
- 应用层之E-mail服务及javaMail邮件发送的知识总结
关于Email服务你需要知道的知识点: 概述: 今天来介绍一下应用层的电子邮件服务,我们每天几乎都在用,电子邮件(email)服务也是一种基于C/S模式的服务,它采用的是一种"存储-转发&q ...
- javaMail邮件发送的简单实现
package com.test.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.Ses ...
- (转)JavaMail邮件发送-发送一个文本邮件和一些问题说明
需要下载的JAR包: JavaMail:http://www.oracle.com/technetwork/java/javamail/index.html JAF:http://www.oracle ...
随机推荐
- Day9 数组 冒泡排序及稀疏数组!
数组 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.(下标从0开始) 数 ...
- Shiro精通学习——【第一集:入门】
入门: main方法直接执行:https://blog.csdn.net/a907691592/article/details/80559904 使用配置文件方式:https://blog.csdn. ...
- 3java基础补充(今天和昨天学习内容整理)
1.java单机项目 2.JavaSE又被称为J2SE,JavaEE和JavaME类同. 3.Java特性(总结) (1)跨平台/可移植性:相同的Java代码可以在任何一个支持的平台(操作系统)上运行 ...
- jvm源码解读--17 Java的wait()、notify()学习
write and debug by 张艳涛 wait()和notify()的通常用法 A线程取得锁,执行wait(),释放锁; B线程取得锁,完成业务后执行notify(),再释放锁; B线程释放锁 ...
- element UI table 状态显示:禁用-启用 上架-下架
vue2.0+elementUI 解决表单上架下架状态的切换 https://blog.csdn.net/weixin_42507803/article/details/81910297 <el ...
- centos7网卡配置文件
HWADDR=00:0c:29:a7:8e:ee TYPE=Ethernet BOOTPROTO=staticDEFROUTE=yes PEERROUTES=yesPEERROUTES=yes IPV ...
- Docker 实践及命令梳理
文档 Docker Reference Documentation Docker 从入门到实践 [中文] 安装 安装 Docker,设置开机启动,然后配置阿里云镜像加速 1. 安装 Docker Do ...
- PAT甲级 1112 Stucked Keyboard
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 这道题初次写的时候,思路也就是考虑 ...
- 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 ...
- Check Directory Existence in Shell
The following command in one line can check if a directory exists. You can check the return value (& ...