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类(设置邮件信息):

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();
}
}

  

测试类:  

public class MyTest {
public static void main(String[] args) {
Mail mail=new Mail();
mail.send();
System.out.println("success!");
} }

  


七、发送带附件的Mail

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);
}
}

测试类:  

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的秘密花园的更多相关文章

  1. JavaMail和James

      JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micr ...

  2. james+javamail入门

    James+Javamail构建邮件服务(一) 本文描述如何使用James搭建具备一定邮件过滤.邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能. 1关于Jame ...

  3. Spring JavaMail发送邮件

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  4. 使用JavaMail发送邮件

    一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Prot ...

  5. James搭建邮件服务器

    来源:http://chenfengcn.iteye.com/blog/356874   1 关于James与Javamail Apache James(Java Apache Mail Enterp ...

  6. 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)

    Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...

  7. 手动搭建apache james邮件服务器,实现邮件功能

    最近一直在搞邮件这块,本来我们邮件发送是用的腾讯免费的企业邮箱,邮件功能没有问题,但是由于邮件的限制,如下: 这些限制导致我们的部分客户是收不到邮件的,哪怕付费,这样的固定频率限制也是无法解决的,可以 ...

  8. JAVA实用工具--javamail

    在实现javamail之前首先要搭建邮件服务器 James 在进行WEB程序开发的时候需要使用Tomcat服务器,但是Tomcat服务器并不支持邮件的处理操作,所以要想进行邮件的发送,还需要配置一个单 ...

  9. 如何做系列(5)-james mail安装总结

    安装james还是比较复杂的,我们在EC2上花费了差不多一天,发现不能发送邮件到外网,后续又陆续花了几天的时间,才成功搭建james邮件服务器. 现在愿意把我们的经历分享出来,让大家参考一下. 由于项 ...

随机推荐

  1. OC与Swift单例

    OC: +(instancetype)shareNetworkTools{ static id instance; static dispatch_once_t onceToken; //onceTo ...

  2. C# DataSet装换为泛型集合

    1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...

  3. STM32F412应用开发笔记之一:初识NUCLEO-F412ZG

    今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛! 近几年来基本都是在STM32平台上做一些设计开发工作.STM32F103.STM32F107.STM32F429等都应用过,但 ...

  4. AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖

    好了,现进入正题,在 AngularJs 实现动态(懒)加载主要是依赖于3个主JS文件和一段依赖的脚本. 实现的过程主要是引用3个主要的JS文件 <script src="angula ...

  5. js原声快速实现选项卡

    var Rea = document.getElementById("rep"); var ReaAll = Rea.querySelectorAll("li" ...

  6. JAVA图片验证码

    package hh.com.util; import java.io.IOException; import javax.servlet.ServletException; import javax ...

  7. NYOJ之题目1058部分和问题

    ---------------------------------------- 简单搜索+剪枝 因为考虑到可能会有多个解,所以是将中间过程保存最后才一起打印出来的 AC代码: 1: 2: impor ...

  8. linux history命令显示时间

    在CentOS上使用history查看历史使用的CMD记录时,发现没有时间,在当前用户的.bash_profile里面,添加 export HISTTIMEFORMAT="%F %T  `w ...

  9. sqlserver 中数据导入到mysql中的方法以及注意事项

    数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...

  10. 【leetcode】Longest Substring Without Repeating Characters

    题目描述: Given a string, find the length of the longest substring without repeating characters. For exa ...