JavaMail和James
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Store,Transport, Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。不过JDK中并没有包含,使用JavaMail发送邮件需要使用Sun发布的mail.jar和activtion.jar两个包。
邮件协议:
SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件
POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件
IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议
JavaMail发邮件的流程:
1.搭建James邮件服务器
2.安装OutLook[邮件客户端]
3.配置outLook邮件客户端
4.搭建James邮件服务器
1.搭建james邮件服务器
james是apache的一个开源项目,纯java实现。
首先我们需要下载apache-james-2.3.2.zip(批:http://pan.baidu.com/s/1pJoyg7h)
其次运行bin目录下的run.bat即可启动服务器
然后运行cmd命令[Telnet localhost 4555]
最后通过apps\james\SAR-INF\config.xml配置服务器(修改节点)
2.安装OutLook[邮件客户端],3.配置outLook邮件客户端
输入产品秘钥(可选,测试的话,不必输入)
产品秘钥:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT
创建用户账号,根据Telnet localhost 4555,进行连接,
用户名和密码默认为root
进入help,进行添加账户(adduser)
按要求安装,下一步即可,注意下面这个:

hosts文件:

安装完成,进行测试:

4.搭建James邮件服务器

最后使用JavaMail发送邮件:
需求:账户收到由javaMail所发送的任务,以及附件信息。
核心代码:
创建一个类EmailAuthenticator并继承自Authenticator,并植入用户名和密码

创建Mail类(设置邮件信息):
|
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
|
public class Mail { private String mailServer,from,to,mailSubject,mailContent; private String username,password; public Mail(){ //设置邮件信息 //进行认证登录的用户名 username="hq@mail.com"; //认证密码 password="hq"; //认证的邮箱对应的邮件服务器 mailServer="192.168.17.176"; //发件人信息 from="wj"; //收件人信息 to="wj@mail.com"; //邮件标题 mailSubject="我们都是好孩子333"; //邮件内容 mailContent="这是一封测试邮件!如有雷同,纯属不可能"; } //设置邮件服务器 @SuppressWarnings("static-access")public void send(){ Properties prop=System.getProperties(); //指定邮件server prop.put("mail.smtp.host", mailServer); //是否开启认证 prop.put("mail.smtp.auth", "true"); //smtp协议的 prop.put("mail.smtp.port", "25"); //产生Session服务 EmailAuthenticator mailauth=new EmailAuthenticator(username, password); Session mailSession=Session.getInstance(prop,(Authenticator)mailauth); try { //封装Message对象 Message message=new MimeMessage(mailSession); message.setFrom(new InternetAddress(from)); //发件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//收件人 message.setSubject(mailSubject); //设置内容(设置字符集处理乱码问题) message.setContent(mailContent,"text/html;charset=gbk"); message.setSentDate(new Date()); //创建Transport实例,发送邮件 Transport tran=mailSession.getTransport("smtp"); tran.send(message,message.getAllRecipients()); tran.close(); } catch (Exception e) { e.printStackTrace(); } } |
测试类:
|
1
2
3
4
5
6
7
8
|
public class MyTest { public static void main(String[] args) { Mail mail=new Mail(); mail.send(); System.out.println("success!"); } } |


七、发送带附件的Mail
|
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
|
public class MailWithAttachment { private JavaMailSender mailSender; //必须使用 JavaMailSender public void setMailSender(JavaMailSender mailSender) { this.mailSender = mailSender; } public void send() throws MessagingException,IOException{ MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); helper.setFrom("hq@mail.com"); helper.setTo("wj@mail.com"); helper.setSubject("生活生活"); helper.setText("生活不止眼前的苟且!!!"); //添加附件1 ClassPathResource file1 = new ClassPathResource( "/cn/bdqn/attachfiles/test.doc"); helper.addAttachment(file1.getFilename(), file1.getFile()); //添加附件2:附件的文件名为中文时,需要对文件名进行编码转换,解决乱码问题 ClassPathResource file2 = new ClassPathResource( "/cn/bdqn/attachfiles/附件测试文件.doc"); helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile()); mailSender.send(mimeMessage); }} |
测试类:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class MailTest { public static void main(String[] args){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); /*测试带附件的邮件*/ try{ MailWithAttachment mailWithAttach = (MailWithAttachment)context.getBean("mailWithAttachment"); mailWithAttach.send(); }catch(Exception e){ System.out.print(e.toString()); } }} |
applicationContext.xml:


JavaMail和James的更多相关文章
- JavaMail和James的秘密花园
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micros ...
- james+javamail入门
James+Javamail构建邮件服务(一) 本文描述如何使用James搭建具备一定邮件过滤.邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能. 1关于Jame ...
- Spring JavaMail发送邮件
JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输. 虽然JavaMail是 ...
- 使用JavaMail发送邮件
一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Prot ...
- James搭建邮件服务器
来源:http://chenfengcn.iteye.com/blog/356874 1 关于James与Javamail Apache James(Java Apache Mail Enterp ...
- 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)
Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...
- 手动搭建apache james邮件服务器,实现邮件功能
最近一直在搞邮件这块,本来我们邮件发送是用的腾讯免费的企业邮箱,邮件功能没有问题,但是由于邮件的限制,如下: 这些限制导致我们的部分客户是收不到邮件的,哪怕付费,这样的固定频率限制也是无法解决的,可以 ...
- JAVA实用工具--javamail
在实现javamail之前首先要搭建邮件服务器 James 在进行WEB程序开发的时候需要使用Tomcat服务器,但是Tomcat服务器并不支持邮件的处理操作,所以要想进行邮件的发送,还需要配置一个单 ...
- 如何做系列(5)-james mail安装总结
安装james还是比较复杂的,我们在EC2上花费了差不多一天,发现不能发送邮件到外网,后续又陆续花了几天的时间,才成功搭建james邮件服务器. 现在愿意把我们的经历分享出来,让大家参考一下. 由于项 ...
随机推荐
- require() 源码解读
2009年,Node.js 项目诞生,所有模块一律为 CommonJS 格式. 时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS ...
- 帮我做个APP,给你20万,做不做?
一.为什么要写这篇文章 前段时间,有个辞职 创业的同事(做法务的) 问我 开发一个 新闻类的APP要多少钱,产品.UI.接口.后台管理页 他们啥都没有,想全部外包. 我 并没有在外包公司做过,也没 ...
- Android数据存储之GreenDao 3.0 详解
前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- Javascript图片预加载详解
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 你可曾见过如此简单粗暴的JavaScript解说 -- if 判断的正确打开方式?
在JavaScript中,对于 if else 的逻辑判断你肯定非常熟悉,本文罗列了几种你不一定知道的简写方式,仅供参考. 例子: 已知小明考了68分,小于60分为不及格,大于60分为及格,问:小明是 ...
- C#生成带logo的二维码
带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类 QRCode ...
- 【趣味分享】C#实现回味童年的24点算法游戏
一.24点游戏玩法规则效果展示 1.初始化界面 2.开始游戏界面 3.游戏超时界面 4.查看答案界面 5.答对界面 6.答错界面 7.计算表达式的验证界面 8.一副牌算完开始新一副牌界面 到这里24点 ...
- wxWidgets
wxWidgets Code::Blocks环境 Code::Blocks下载: Code::Blocks使用: codeblocks-16.01mingw-setup.exe 它的gcc版本为4.9 ...
- c#中get set 的使用
在早期学习c#的过程中,经常遇到这样的语句: public string StudentName { get{return stuName;} set{stuName=value;} } 当时也不是很 ...