JavaMail技术

原创 2016年05月30日 23:41:33

JavaMail技术

1. JavaMail介绍

现如今,使用email发送邮件非常普遍和常见,平时公司内部交流,网站上信息通知,注册时激活验证等地方都在使用邮件,Java也有关于发送和接收邮件技术封装Java中提供的技术即就是要给大家介绍的JavaMail技术。

 

2. 邮件协议

2.1. 邮件服务器简介

邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器接收邮件的服务器发送邮件的服务器使用发送协议,现在常用的是SMTP协议。所以,通常发邮件的服务器也称为SMTP服务器。接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3IMAP服务器。目前经常见到的服务器为SMTPPOP3服务器。

例如:在注册了126的邮箱之后,它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。默认发邮件服务器的端口为25,收邮件的端口为110

 

2.2. 邮件收/发协议

SMTP协议-发邮件协议全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。端口一般为25.POP3协议-收邮件协议全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。端口一般为110.IMAP协议-对POP3的扩展全称为Internet Message Access ProtocalInternet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。 

3. Apache的JavaMail使用

邮件客户端的主要任务是向邮件服务器发送邮件,以及接收来自邮件服务器的邮件。Sun公司制定了一套API,它封装了邮件通信的各种协议。为Java开发者提供了收发电子邮件的公共接口。但是由于Sun公司提供的那些接口比较麻烦,Apache对sun公司的技术进行了封装,使用Apachemail技术,可以简单方便的发送邮件。

3.1. 下载javamailjar

下载地址:http://commons.apache.org/proper/commons-email/download_email.cgi

 

 

解压jar包,在项目中导入jar包。

 

将jar包添加到classpath中即可使用。

 

3.2. Apache的mail类介绍

 

3.2.1. Email类介绍

Email类是Apache邮件jar包中的核心类,它本身是一个抽象类,需要使用其子类SimpleEmailMultiPartEmail类创建对象。

 

Email类它是基类,可以通过Email设置发送者邮件和名称,同时可以设置接收者的邮件、名称、主题、发送时间。可以通过其子类设置需要发送的邮件主题内容。

3.2.2. SimpleEmail介绍

 

SimpleEmail类是用来发送简单的互联网邮件的,但是不携带任何的附件。

3.2.3. MultiPartEmail介绍

 

MultiPartEmail类是用来发送可以携带附件的邮件内容。其子类HtmlEmail可以发送包含html内容的邮件。

3.3. 发送简单的文本数据内容

3.3.1. 发送简单邮件代码实现

/*

 * 演示使用Apachemail技术发送邮件

 */

public class MailDemo {

public static void main(String[]args) throws EmailException {

// 创建Mail对象

Email mail = new SimpleEmail();

// 设置发送邮件的主机服务器

mail.setHostName("smtp.sina.com");

// 设置发送邮件的端口号

mail.setSmtpPort(25);

// 设置发送者的邮箱地址和密码

mail.setAuthentication("qb_sh_test@sina.com","2015qazwsx");

// 设置安全连接

mail.setSSLOnConnect(true);

//设置发送者的邮件

mail.setFrom("qb_sh_test@sina.com");

// 设置主题

mail.setSubject("test");

// 设置邮件内容

mail.setMsg("ceshi数据");

// 设置接收者邮件

mail.addTo("qubo_323@163.com");

// 发送邮件

mail.send();

}

}

3.3.2. 邮箱开启POP3第三方客户端(网易)操作

上面的程序在运行的时候会报下面的异常:

Exception in thread "main" org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:465

at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)

at org.apache.commons.mail.Email.send(Email.java:1448)

at cn.qb.mail.MailDemo.main(MailDemo.java:41)

Caused by: javax.mail.AuthenticationFailedException

at javax.mail.Service.connect(Service.java:319)

at javax.mail.Service.connect(Service.java:169)

at javax.mail.Service.connect(Service.java:118)

 

异常的发生原因:

由于发件的邮箱使用的163邮箱,而邮箱设置中没有开启POP3/STMP/IMAP的第三方邮件客户端操作。需要先使用网页登录邮箱,然后在设置中开启第三方客户端操作服务。

 

 

在勾选POP3/STMP服务或者是IMAP/SMTP服务的时候会弹出下面窗口

 

选择确定,设置授权码

 

选择开启的时候会弹出需要通过手机验证码设置授权码

 

输入验证码之后,点击确定:

 

设置对应的授权码即可。

 

在设置发件箱的账号和密码的时候,密码需要使用授权码作为密码,否则无法发送。

 

3.3.3. 邮箱开启POP3(新浪)

 

 

3.4. 发送带有HTML和图片的邮件

/*

 * 发送包含HTML片段的邮件

 */

public class MailDemo2 {

public static void main(String[]args) throws Exception {

// 可以发送图片和html片段的Email对象

HtmlEmail mail = new HtmlEmail();

// 设置发送邮件的主机服务器

mail.setHostName("smtp.sina.com");

// 设置发送邮件的端口号

mail.setSmtpPort(25);

// 设置发送者的邮箱地址和密码

mail.setAuthentication("qb_sh_test@sina.com","2015qazwsx");

// 设置安全连接

mail.setSSLOnConnect(true);

// 设置发送者的邮件

mail.setFrom("qb_sh_test@sina.com");

// 设置主题

mail.setSubject("test html & Picture");

// 设置图片的网络路径

URL url = new URL("http://img13.360buyimg.com/n1/jfs/t2302/16/135479564/94882/c76da045/55f0e877N3c24faa3.jpg");

String cid = mail.embed(url, "京东手机图片");

// 处理乱码问题

mail.setCharset("utf-8");

// 将图片路径添加到邮件内容中

mail.setHtmlMsg("<html>京东图片<img src=\"cid:"+cid+"\"></html>");

// 设置邮件内容

mail.setTextMsg("你的邮件不支持html格式的邮件");

// 设置接收者邮件

mail.addTo("qubo_323@163.com");

// 发送邮件

mail.send();

}

}

3.5. 发送带有附件的邮件

/*

 * 发送附件

 */

public class MailDemo3 {

 

public static void main(String[]args) throws Exception {

 

EmailAttachment attachment = new EmailAttachment();

// 附件内容 path是磁盘本地文件路径和名称

attachment.setPath("d:/1.jpg");

// 将网络中的文件作为附件

//attachment.setURL(new URL("http://img13.360buyimg.com/n1/jfs/t2302/16/135479564/94882/c76da045/55f0e877N3c24faa3.jpg"));

// 表示当前设置的是附件

attachment.setDisposition(EmailAttachment.ATTACHMENT);

attachment.setDescription("附件描述");

attachment.setName("附件名称.jpg");

 

// 创建可以发送附件的Email对象

MultiPartEmail email = new MultiPartEmail();

email.setHostName("smtp.sina.com");

email.setSmtpPort(25);

// 设置发送者的邮箱地址和密码

email.setAuthentication("qb_sh_test@sina.com","2015qazwsx");

// 设置安全连接

email.setSSLOnConnect(true);

// 设置发送者的邮件

email.setFrom("qb_sh_test@sina.com");

email.addTo("qubo_323@163.com");

email.setSubject("测试附件邮件");

email.setMsg("测试带有附件的邮件------这时邮件的正文内容!!!");

// 添加附件

email.attach(attachment);

// 发送邮件

email.send();

}

}

 

基于JavaMail的Java邮件发送:简单邮件发送

本文链接: http://blog.csdn.net/xietansheng/article/details/51673073电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,...
  • xietansheng
  • xietansheng
  • 2016年06月14日 21:56
  • 103770

Java Mail(二):JavaMail介绍及发送一封简单邮件

本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983,转载请注明。       JavaMail是SUN提供给开...
  • ghsau
  • ghsau
  • 2014年01月04日 15:57
  • 78065

JavaMail

Javamail遵循两个协议,一个是smtp协议,另一个是pop3协议。一般情况下把处理smtp请求(用户发送请求)的邮件服务器称之为smtp服务器。而把处理pop3(接收)请求的邮件服务器称之为po...
  • jjkang_
  • jjkang_
  • 2017年02月22日 23:39
  • 226

JavaMail基本使用

JavaMail基本使用基本概述 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于J...
  • q547550831
  • q547550831
  • 2016年10月23日 20:10
  • 1394

使用javamail发送验证邮件

一般我们注册账号时,网站通常会要求我们填写一个邮箱地址,随后发送一封验证邮件到该邮箱,我们点击邮件里的验证链接(或者填写发送的验证码)就可以完成注册。 这个功能可以通过javamail实现. 首先原材...
  • fengsigaoju
  • fengsigaoju
  • 2016年10月03日 13:16
  • 1462

JavaMail介绍

一、概述         JavaMail是由Sun定义的一套收发电子邮件的API,但它并没有包含在JDK中,而是作为JavaEE的一部分。不同的厂商可以提供自己的实现类,除JavaMail服务提供...
  • lzghxjt
  • lzghxjt
  • 2016年01月03日 01:23
  • 1653

javaMail移动邮件

import java.util.Properties; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.M...
  • u013183865
  • u013183865
  • 2014年10月27日 15:29
  • 1044

Java邮件开发-----JavaMail(二)

这篇博客主要是介绍如何实现将邮件发送给多个收件人和如何利用Authenticators对象实现用户验证。             在指定收件人的时候,我们可以有两种方法来指定。上篇博客是在发送邮件的...
  • chenssy
  • chenssy
  • 2012年12月10日 13:37
  • 7702

Java发送邮件的几种方式

最近的一个项目中用到了邮件发送,所以研究了一下。将其总结下来。 要发送邮件就要用到java中的JavaMail,关于JavaMailAPI的详解呢在 (http://blog.csdn.net/i...
  • qq_32371887
  • qq_32371887
  • 2017年05月31日 16:21
  • 9405

java mail实现Email的发送,完整代码

1、对应用程序配置邮件会话javax.mail.Session保存邮件系统的配置属性和提供用户验证的信息,发送email首先要获取session对象。(1)Session.getInstance(ja...
  • karem
  • karem
  • 2009年10月09日 15:31
  • 62919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaMail技术
举报原因:
原因补充:

(最多只允许输入30个字)