mail java_基于JavaMail的Java邮件发送:简单邮件发送
http://blog.csdn.net/xietansheng/article/details/51673073
http://www.cnblogs.com/codeplus/archive/2011/10/30/2229391.html
http://blog.csdn.net/ghsau/article/details/17839983
********************
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如果通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。
1. 电子邮件协议
电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。
2. JavaMail
我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去 Java 或 Oracle 官网下载。
这里我从 java.NET 网站中下载一个最新的,包含了 SMTP, IMAP, 和 POP3 协议的实现的 jar 包:
3. 创建一封简单的电子邮件
首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程,这里不多说。
邮件创建步骤:
创建一个邮件对象(MimeMessage);
设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
设置邮件的主题(标题);
设置邮件的正文(内容);
设置显示的发送时间;
保存到本地。
代码实现:
package com.xiets.javamaildemo;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws Exception {
// 1. 创建一封邮件
Properties props = new Properties(); // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
Session session= Session.getDefaultInstance(props); // 根据参数配置,创建会话对象(为了发送邮件准备的)
MimeMessage message = new MimeMessage(session); // 创建邮件对象
/*
* 也可以根据已有的eml邮件文件创建 MimeMessage 对象
* MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));
*/
// 2. From: 发件人
// 其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
// 真正要发送时, 邮箱必须是真实有效的邮箱。
message.setFrom(new InternetAddress("aa@send.com", "USER_AA", "UTF-8"));
// 3. To: 收件人
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("cc@receive.com", "USER_CC", "UTF-8"));
// To: 增加收件人(可选)
message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
// Cc: 抄送(可选)
message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
// Bcc: 密送(可选)
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));
// 4. Subject: 邮件主题
message.setSubject("TEST邮件主题", "UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent("TEST这是邮件正文。。。", "text/html;charset=UTF-8");
// 6. 设置显示的发件时间
message.setSentDate(new Date());
// 7. 保存前面的设置
message.saveChanges();
// 8. 将该邮件保存到本地
OutputStream out = new FileOutputStream("MyEmail.eml");
message.writeTo(out);
out.flush();
out.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
保存的 MyEmail.eml 可以使用邮件客户端打开查看,实际上就是一堆符合SMTP协议格式的文本(内容使用base64进行了编码),也可用记事本打开,如下所示:
4. 发送电子邮件
发送邮件首先需要有一个邮箱账号和密码,本文以网易163邮箱为例,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,如下所示(其他邮箱大同小异):
代码实现:
package com.xiets.javamaildemo;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
public class Main {
// 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
public static String myEmailAccount = "xxxxxx@163.com";
public static String myEmailPassword = "xxxxxx";
// 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般格式为: smtp.xxx.com
// 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
public static String myEmailSMTPHost = "smtp.163.com";
// 收件人邮箱(替换为自己知道的有效邮箱)
public static String receiveMailAccount = "xiejava@qq.com";
public static void main(String[] args) throws Exception {
// 1. 创建参数配置, 用于连接邮件服务器的参数配置
Properties props = new Properties(); // 参数配置
props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
props.setProperty("mail.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.auth", "true"); // 请求认证,参数名称与具体实现有关
// 2. 根据配置创建会话对象, 用于和邮件服务器交互
Session session = Session.getDefaultInstance(props);
session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log
// 3. 创建一封邮件
MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
// 4. 根据 Session 获取邮件传输对象
Transport transport = session.getTransport();
// 5. 使用 邮箱账号 和 密码 连接邮件服务器
// 这里认证的邮箱必须与 message 中的发件人邮箱一致,否则报错
transport.connect(myEmailAccount, myEmailPassword);
// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(message, message.getAllRecipients());
// 7. 关闭连接
transport.close();
}
/**
* 创建一封只包含文本的简单邮件
*
*@param session 和服务器交互的会话
*@param sendMail 发件人邮箱
*@param receiveMail 收件人邮箱
*@return
*@throws Exception
*/
public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人
message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
// 4. Subject: 邮件主题
message.setSubject("打折钜惠", "UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent("XX用户你好, 今天全场5折, 快来抢购, 错过今天再等一年。。。", "text/html;charset=UTF-8");
// 6. 设置发件时间
message.setSentDate(new Date());
// 7. 保存设置
message.saveChanges();
return message;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
发送后查看收件人的收件箱:
mail java_基于JavaMail的Java邮件发送:简单邮件发送相关推荐
- JavaMail发送简单邮件
2019独角兽企业重金招聘Python工程师标准>>> package cn.jmail.test;import java.util.Properties;import javax. ...
- 内网java发送邮件_基于JavaMail的Java邮件发送:简单邮件发送
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...
- java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...
- java发送简单邮件_Java程序实现发送简单文本邮件
/** * Java程序实现发送简单文本邮件 * * @author Administrator * */ public class SendTextMail { // 定义发件人地址 public ...
- interupt java_基于JDK8总结java中的interrupt
1. interrupt知识点 以下总结基于JDK8 本文不会完整说明interrupt,只会罗列一些比较重要的点.完整了解Thread.interrupt可以看参考资料. 以下的一些理解新的有助于理 ...
- 一、JAVA发送简单邮件(QQ邮箱为例)
以QQ邮箱为例 1.导入jar包:## <dependency><groupId>javax.mail</groupId><artifactId>mai ...
- javax.mail.FolderClosedException: * BYE JavaMail Exception: java.io.IOException: Connection dropped
解决方案: (1) 将floder idle设置为true:folder.idle(true); 这样其实只是忽略异常而已: (2) 解决方案二:ReadMail operator need to h ...
- 出租车系统java_基于WEB的JAVA出租车打车系统
每天记录学习,每天会有好心情.*^_^* 今天记录的项目是出租车打车系统,这个项目是这么回事:为了适应新型出租车管理体制,设计了一个基于Web平台的出租车管理系统方案.介绍了该系统的总体框架,除常见功 ...
- javaMail学习(四)——使用javaMail给网易账户发简单邮件
代码跟上一篇的差不多,只需改变smpt的服务器地址和端口号. package com.wjl.mail.utils;import java.security.GeneralSecurityExcept ...
最新文章
- 何时开学?教育部最新回应:满足三个条件可开学
- B组前导码功率偏移(messagePowerOffsetGroupB)
- 产业链布局优势明显,三星开启全新移动智能体验新时代
- 禁用select下拉方法
- Python: 分数运算
- 服务器如果选用CPU
- 从山顶透过云层看城市
- gaussian软件linux下载,Gaussian软件下载地址及安装说明
- Iris数据集神经网络训练
- 关于jpa的mappedBy用法
- 牛客网优惠码-直通BAT面试算法精品课购买
- 同为前端工程师,待遇差别居然这么大!
- Excel技巧之减肥
- paddle 基础函数 cosine_decay
- Chrome最好用的插件都在这里了
- 信号完整性分析5——信号上升时间
- 零基础学习 iOS 开发
- 计算机网路课后作业(2)——物理层
- 计算机专业跨考会计好处,细数跨考会计的各种好处
- 《Perl语言入门》读书笔记(六)哈希
热门文章
- 杨校老师课堂之JavaScript右下角广告弹框教程
- 面试问题,持续更新...
- c语言精确线搜索抛物线法,一维迭代搜索(黄金分割法抛物线法).ppt
- 安卓Root后删除系统内置自带软件
- 【流式细胞仪软件】上海道宁为您带来FCS Express,让您轻松缩小流式细胞术和结果之间的差距
- jQuery方法返回jQuery对象还是DOM对象
- 非洛达芯片检测聚合教程NOT AIROHA CHIP
- airpods二代降噪吗_真实测评华强北airpods各版本以及芯片,洛达1536U是目前顶配...
- PS美工教程:制作真实水面倒影效果详细步骤
- 遇到的Exception/error及解决办法记录汇总