JavaMail

合集下载

java发邮件方法

java发邮件方法

java发邮件方法Java是一种功能强大的编程语言,它提供了多种方法来实现发送邮件的功能。

本文将介绍两种常用的Java发邮件的方法,分别是使用JavaMail API和使用Spring Framework的JavaMail库。

JavaMail API是一个用于发送和接收电子邮件的标准API,它是Java平台的一部分。

使用JavaMail API,我们可以在Java程序中轻松地发送邮件。

下面是使用JavaMail API发送邮件的步骤:1. 添加依赖:首先,我们需要在我们的Java项目中添加JavaMail API的依赖。

可以通过Maven或Gradle等构建工具,将以下依赖添加到项目的构建文件中:```xml<dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version></dependency>```2. 创建会话对象:接下来,我们需要创建一个会话对象,用于与邮件服务器进行通信。

可以使用javax.mail.Session类的getInstance()方法来创建会话对象,该方法接受一个Properties对象作为参数,用于指定邮件服务器的配置信息,如SMTP 服务器的地址、端口号等。

```javaProperties properties = new Properties();properties.put("mail.smtp.host", "");properties.put("mail.smtp.port", "25");Session session = Session.getInstance(properties);```3. 创建邮件消息:然后,我们需要创建一个邮件消息对象,用于设置邮件的各种属性,如发件人、收件人、主题、内容等。

11、JavaMail课件

11、JavaMail课件
POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。
SMTP协议的命令ቤተ መጻሕፍቲ ባይዱ
SMTP命令及格式 说 明
Ehlo<SP><domain><CRLF>
ehlo命令是SMTP邮件发送程序与SMTP邮件接收程序建立连接后 必须发送的第一条SMTP命令,参数<domain>表示SMTP邮件发送 者的主机名。ehlo命令用于替代传统SMTP协议中的helo命令。 如果SMTP邮件接收程序需要SMTP邮件发送程序进行认证时,它 会向SMTP邮件发送程序提示它所采用的认证方式,SMTP邮件发 送程序接着应该使用这个命令回应SMTP邮件接收程序,参数 <para>表示回应的认证方式,通常是SMTP邮件接收程序先前提示 的认证方式。 此命令用于指定邮件发送者的邮箱地址,参数<reverse-path>表示 发件人的邮箱地址。 此命令用于指定邮件接收者的邮箱地址,参数<forward-path>表示 接收者的邮箱地址。如果邮件要发送给多个接收者,那么应使用 多条Rcpt<SP>To命令来分别指定每一个接收者的邮箱地址。 此命令用于表示SMTP邮件发送程序准备开始传送邮件内容,在这 个命令后面发送的所有数据都将被当作邮件内容,直至遇到 “<CRLF>.<CRLF>”标识符,则表示邮件内容结束。
MIME中的组合关系
multipart类型基本格式
* multipart/mixed类型
如果一封邮件中含有附件,那邮件的Content-Type域中必须定义 multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary 标识将附件内容同邮件其它内容分成不同的段。基本格式如下: Content-Type: multipart/mixed; boundary="{分段标识}"

邮件客户端使用Java语言和JavaMail库开发的小程序

邮件客户端使用Java语言和JavaMail库开发的小程序

邮件客户端使用Java语言和JavaMail库开发的小程序邮件是现代社会中非常重要的通信工具之一,而邮件客户端则是使用邮件的主要方式之一。

为了提供一个便捷的邮件发送和接收工具,本文将介绍如何使用Java语言和JavaMail库开发一个小型的邮件客户端程序。

一、引言随着互联网的普及,电子邮件已经成为人们日常生活中不可或缺的一部分。

邮件客户端是用于发送和接收电子邮件的软件应用程序。

本文将通过使用Java语言和JavaMail库开发一个小型的邮件客户端程序,来演示如何利用编程语言的力量来简化邮件的处理和管理。

二、准备工作在开始开发之前,我们需要准备一些必要的工作。

首先,我们需要安装Java开发环境(JDK)以及支持邮件功能的JavaMail库。

其次,我们需要一个有效的邮件服务器地址、端口号、用户名和密码,这些信息用于程序连接和认证邮件服务器。

三、创建项目使用Java语言和JavaMail库开发邮件客户端的第一步是创建一个新的Java项目。

我们可以使用任何集成开发环境(IDE)来创建和管理项目,比如Eclipse、IntelliJ IDEA等。

创建项目后,我们需要在项目的依赖项中添加JavaMail库,以便在代码中使用该库提供的功能。

四、连接邮件服务器在程序中连接邮件服务器是发送和接收邮件的基础步骤。

我们可以使用JavaMail库中提供的JavaMailSession类来创建一个与邮件服务器的会话连接。

通过设置邮件服务器地址、端口号、用户名和密码,我们可以建立与邮件服务器的连接,并进行后续的邮件处理操作。

五、发送邮件发送邮件是邮件客户端的主要功能之一。

我们可以使用JavaMail库提供的SMTP协议来发送邮件。

首先,我们需要创建一个MimeMessage对象,用于表示要发送的邮件。

然后,我们可以设置邮件的发送人、接收人、主题、内容等信息。

最后,使用JavaMailSession类中的Transport对象发送邮件。

JavaMail组件简单介绍

JavaMail组件简单介绍

JavaMail组件的简单介绍一、什么是JavaMailJavaMail是Sun发布的用来处理email的API。

它可以方便地执行一些常用的邮件传输。

虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。

除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。

JavaBeans Activation相关的包你可以到sun的官方网站上去下载二、如何使用JavaMail组件在使用JavaMail发送邮件之前,先来看一下在发送邮件过程中主要使用到的几个类以及它们的用处和用法!Session定义了一个基本的邮件会话,所有的基于JavaMail的程序都至少需要一个或全部的对话目标。

Session对象需要一个,Session的构造函数是私有的,你可以通过getDefaultInstance()方法来取得一个单一的可以被共享的默认的Session,如:Properties props=new Properties();……..Session session = Session.getDefaultInstance(props, null);或者,可以使用getInstance()方法来创建一个唯一的Session如:Properties props=new Properties();…….Session session=Session.getInstance(props,null);在多数情况下,整个应用中使用一个共享Session已经足够了;2、创建了Session 对象以后,那么下面就要创建Message对象来发送Session., Message是一个抽象类,再大部分应用中可以使用它的子类可以用如下的方法创建一个Message;Message newMessage = new MimeMessage(sendMailSession);一旦得到了Message,就可以设置它的各个部分。

Java实现发送邮件,图片,附件

Java实现发送邮件,图片,附件

Java实现发送邮件,图⽚,附件1、JavaMail 介绍JavaMail 是sun公司(现以被甲⾻⽂收购)为⽅便Java开发⼈员在应⽤程序中实现邮件发送和接收功能⽽提供的⼀套标准开发包,它⽀持⼀些常⽤的邮件协议,如前⾯所讲的SMTP,POP3,IMAP,还有MIME等。

我们在使⽤JavaMail API 编写邮件时,⽆须考虑邮件的底层实现细节,只要调⽤JavaMail 开发包中相应的API类就可以了。

JavaMail 下载地址:2、JavaMail APIJavaMail API 按照功能可以划分为如下三⼤类:①、创建和解析邮件的API②、发送邮件的API③、接收邮件的API以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核⼼类,我们在编写程序时,记住这四个核⼼类,就很容易编写出Java邮件处理程序。

Message 类:javax.mail.Message 类是创建和解析邮件的核⼼ API,这是⼀个抽象类,通常使⽤它的⼦类javax.mail.internet.MimeMessage 类。

它的实例对象表⽰⼀份电⼦邮件。

客户端程序发送邮件时,⾸先使⽤创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类)发送。

客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使⽤邮件解析API从这个对象中解析收到的邮件数据。

Transport 类:javax.mail.Transport 类是发送邮件的核⼼API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好Message 对象后,只需要使⽤邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调⽤它的发送⽅法,就可以把邮件发送给指定的 SMTP 服务器。

javaMail

javaMail
bp.setContent(
"<meta http-equiv=Content-Type content=text/html; charset=gb2312>"
+ mailBody, "text/html;charset=GB2312");
mp.addBodyPart(bp);
if (props == null)
props = System.getProperties(); // 获得系统属性对象
props.put("mail.smtp.host", hostName); // 设置SMTP主机
}
/**
*
*
*
* @return boolean
*
*
*
* @param pass
* String
*
*
*
*/
public boolean addFileAffix(String filename) {
System.out.println("增加邮件附件:" + filename);
try {
JavaMail
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows 2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。

JAVA实现邮件发送

JAVA实现邮件发送

JAVA实现邮件发送Java可以通过JavaMail库实现邮件发送。

JavaMail是一个开源API,提供了发送、接收和管理电子邮件的功能。

下面是一个简单的Java代码示例,实现了发送邮件的功能:```javaimport java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class EmailSenderpublic static void main(String[] args)//邮件发送者信息String senderPassword = "your_password";//邮件接收者信息//邮件服务器配置//邮件内容String subject = "测试邮件";String body = "这是一个Java邮件发送示例。

";//设置邮件属性Properties props = new Properties(;props.put("mail.smtp.host", smtpHost);props.put("mail.smtp.auth", "true");props.put("mail.smtp.port", "465");props.put("mail.smtp.socketFactory.port", "465");//创建认证器Authenticator authenticator = new Authenticatoprotected PasswordAuthentication getPasswordAuthenticatio return new PasswordAuthentication(senderEmail, senderPassword);}};//创建会话Session session = Session.getDefaultInstance(props, authenticator);try//创建邮件消息MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(senderEmail));message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail));message.setSubject(subject);message.setText(body);//发送邮件Transport.send(message);System.out.println("邮件发送成功!");} catch (MessagingException e)e.printStackTrace(;}}```以上是一个基本的邮件发送示例。

JavaMail开发

JavaMail开发

JavaMail开发<精通J2EE网络编程 12章>用Java 开发的各种应用系统中经常要用到收发邮件的功能,JavaMail提供了丰富的API供程序员使用。

本章将首先讲述JavaMail 中使用的邮件协议及基本的概念,再介绍与JavaMail开发相关的类及其常用方法,然后编写发送和接收E-mail的程序。

本章中的所有实例都是利用已配置好邮件服务器的服务来发送和接收电子邮件,而并非要在本地服务器上配置邮件服务器。

12.1 JavaMail基础12.1.1 邮件协议在Internet中,常用的与邮件操作相关的协议有3个——SMTP、POP、IMAP。

在学习JavaMail之前先学习Internet中实现邮件传输的邮件协议是学好JavaMail开发的基础,因为邮件的传送要依赖于具体的传输协议。

简单邮件传输协议(simple mail transfer protocol,SMTP)协议是邮件服务器之间相互发送邮件的协议,邮件客户机也可以使用它向服务器发送邮件。

一个邮件先被传送到邮件服务器,再被邮件服务器分发到一个或多个目标邮件服务器。

邮局协议第3版(post office protocol version 3,POP3)协议用于从邮件服务器检索以得到新的邮件,目前常用的就是这个协议的第3版,大量的客户机从邮件服务器接收邮件就是使用POP3协议。

因特网消息访问协议(internet messager access protocol,IMAP)协议比POP3功能更加强大,它可在接收邮件时,把邮件保存在邮件服务器中,既可在服务器中保留邮件也可把邮件下载下来。

基于此协议的邮件服务器需要长期保存邮件,因此需要大量的硬盘空间以储存众多用户的邮件。

12.1.2 JavaMail概述JavaMail 对SMTP、POP3、IMAP提供了支持,封装了电子邮件功能中的邮件对象、发送功能、身份认证、接收等。

然而,Weglogic 8.1中仅包含了JavaMail1.1.3,它仅支持SMTP和IMAP。

JavaMail概述

JavaMail概述

JavaMail概述J avaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。

它是Sun 公司发布的用来处理email的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。

用户可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

Java Mail是JavaEE平台提供的邮件API。

使用这套API,可以轻松实现邮件的创建,发送和接受。

1.什么是E-mailE-mail是用户间或应用程序间交换信息的Internet标准。

每个用户都有自己的网上邮箱,发送方把信息发送到自己的网上信箱,并声明信息的接收方;该信箱所在的“邮局”会把信息发送到接收方的“邮局”,接收方从接收方的“邮局”中自己的信箱获取信息。

这样就完成了信息从发送方到接收方的传递。

所以,要发送或者接收邮件首先应该有自己的邮箱。

E-mail消息可以包含普通文本,也可以包含更为复杂的多媒体数据类型和图像声音等。

这样,用户就可以交换各种各样的信息。

每个E-mail消息的头信息中都包含消息的发出者、发送的目的地和其他相关信息。

2 E-mail体系结构要完成消息的交互,需要几方面的支持:邮件发送客户端程序、邮件接收客户端程序、邮件发送服务器和邮件接收服务器,此外,还需要相关的通信协议。

邮件发送客户端程序和邮件接收客户端程序可以是相同的,例如经常使用的微软的Outlook既可以发送邮件,也可以接收邮件。

邮件发送服务器和邮件接收服务器也可以是相同的服务器。

在与邮件服务器交互的过程中,主要完成两个动作,把邮件发送到邮件服务器,以及从邮件服务器读取邮件。

邮件发送方通过邮件发送客户端把邮件发送到发送方的邮件服务器,在发送的过程中需要用到SMTP协议。

发送方的邮件服务器把邮件发送到接收方的邮件服务器,使用的协议也是SMTP。

邮件接收方从接收方邮件服务器接收邮件,使用POP3协议或者IMAP协议。

3 E-mail相关的协议简单邮件传输协议(SMTP)在邮件发送方把邮件发送到发送方邮件服务器的时候,需要用到简单邮件传输协议(Simple Mail Transport Protocol,简称SMTP),发送方邮件服务器把邮件发送到接收方邮件服务器的时候,也要用到SMTP。

Java邮件发送功能实现详解:SMTP协议与JavaMail API

Java邮件发送功能实现详解:SMTP协议与JavaMail API

Java邮件发送功能实现详解:SMTP协议与JavaMail API简介在现代社会中,电子邮件已经成为人们日常沟通的重要方式之一。

而在Java编程领域,实现邮件发送功能同样是一项重要的任务。

通过SMTP协议和JavaMail API,我们可以很方便地在Java程序中实现邮件发送功能。

本文将详细介绍如何使用SMTP协议和JavaMail API在Java程序中实现邮件发送功能。

SMTP协议SMTP(Simple Mail Transfer Protocol)是用于邮件传输的协议,它定义了邮件是如何从发件人传送到收件人的过程。

在使用Java实现邮件发送功能时,我们需要理解SMTP协议的工作原理,并按照协议规范来构建和发送邮件。

SMTP协议的工作流程通常包括以下步骤:1. 发件人向SMTP服务器发送邮件;2. SMTP服务器根据收件人的域名查找目标邮件服务器;3. SMTP服务器将邮件传递给目标邮件服务器; 4. 目标邮件服务器将邮件存储在收件人的邮箱中。

JavaMail APIJavaMail API是一组用于处理电子邮件的Java类库,它提供了发送、接收和处理邮件的功能。

通过JavaMail API,我们可以方便地在Java程序中实现各种邮件相关操作,包括发送邮件、接收邮件、附件处理等。

在使用JavaMail API发送邮件时,一般需要按照以下步骤进行: 1. 创建一个邮件会话(Session)对象; 2. 创建一个邮件(Message)对象,并设置发件人、收件人、主题、内容等信息; 3. 创建一个邮件传输(Transport)对象,并连接到SMTP服务器; 4. 发送邮件并关闭连接。

实现Java邮件发送功能下面将以一个简单的示例来演示如何在Java程序中实现邮件发送功能。

假设我们要发送一封包含文本内容的简单邮件。

```java import java.util.Properties; import javax.mail.; import javax.mail.internet.;public class SendEmail { public static void main(String[] args) { final String username =。

java mail 深入浅出

java mail 深入浅出

JavaMailAPI可以到 /products/javamail/index.html 进行下载,并将mail.jar添加到classpath即可.
JAF框架可以到 /products/javabeans/glasgow/jaf.html 进行下载,并将activation.jar添加到classpath即可.
Address地址类,和Message一样也是一个抽象类,一旦创建了Session和Message并将内容填入消息后,就可以用Address确定信件的地址了,用javax.mail.internet.
InternetAddress类.若创建的地址只包含电子邮件地址,只要传递电子邮件地址给构造器就可以了.例如:Address address = new InternetAddress( “ it5719@ ” );
2,将您的SMTP服务器名添加到mail.smtp.host关键字的属性中.
Props.pout( “ mail.smtp.host ” ,host);
3,获取基于Properties Session对象.
Session session = Session.getDefaultInstance(props,null);
Store和folder用session获取消息,与发送消息开始很相似,但是在session得到后,很可能实用用户名和密码或实用Authenticator连接到一个Store.类似于Transport,也是一样要告诉store用什么协议.例如
Store store = session.getStore( “ pop3 ” );
4,从Session创建一个MimeMessage.
MimeMessage message = new MimeMessage(session);

java mail详解

java mail详解

java mail详解JavaMail是Java平台上用于发送、接收和管理电子邮件的API。

它提供了一种方便的方式来处理电子邮件,包括发送和接收电子邮件,以及访问和操作邮件服务器。

首先,让我们来看看JavaMail API的一些主要功能和用法。

JavaMail API包括javax.mail包,它提供了发送和接收电子邮件的类和接口。

要发送电子邮件,你需要使用javax.mail.Session类来创建一个会话对象,然后使用javax.mail.internet.MimeMessage类来创建邮件消息。

你可以设置邮件的主题、内容、附件等信息,并使用javax.mail.Transport类的send方法来发送邮件。

另外,JavaMail API也支持接收邮件。

你可以使用javax.mail.Store类来连接到邮件服务器,并使用javax.mail.Folder类来访问邮件文件夹。

通过这些类,你可以检索邮件、读取邮件内容以及执行其他邮件管理操作。

JavaMail API还支持与邮件服务器的安全通信,包括SSL和TLS协议。

你可以使用javax.mail.Session类的属性来配置安全连接参数,以确保与邮件服务器的通信是安全的。

除了基本的发送和接收邮件功能,JavaMail API还提供了一些高级功能,比如处理邮件附件、设置邮件优先级、回复和转发邮件等。

你可以使用javax.mail.internet.MimeBodyPart类来处理邮件附件,使用javax.mail.Flags类来设置邮件标记,以及使用javax.mail.internet.InternetAddress类来表示邮件地址等。

总之,JavaMail API提供了丰富的功能和灵活的接口,使得在Java应用程序中处理电子邮件变得非常方便。

无论是发送简单的文本邮件,还是处理复杂的邮件操作,JavaMail API都能满足你的需求。

希望这些信息能帮助你更好地理解和使用JavaMail API。

JavaMail使用总结

JavaMail使用总结

JavaMail概述SUN公司发布的用来处理EMAIL的API,提供给开发者处理电子邮件相关的编程接口。

它虽是SUN的API,但它还没被加在标准的JAVA开发工具包中,这就意味着你使用前必须另外下载JAVAMAIL文件。

除此之外你还需要SUN的JAVABEANS Activation Framework (JAF)。

Javabeans activation framework运行很复杂,简单的说就是JAVAMAIL的运行必须得依赖于它的支持。

下载安装JAVAMAIL是可选包,项目中需要用到就去官网下载,同时也需要下载JAF。

安装JAVAMAIL只需要把它们直接把它们COPY到lib里(web项目不需要build path,java 项目build path一下)就算安装成功。

所需的两个jar包:JAVAMAIL mail.jar ACTIVATION activation-1.1.jar底层Session,Message,Address,Authenticator,Transport,Store,Folder等。

Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。

另外很好的实现了JavaMail API的框架有James、Spring Mail。

TipsSMTP:用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

它帮助每台计算机在发送或中转信件时找到下一个目的地。

用来发送或中转发出的电子邮件。

关于ng.NoClassDefFoundError: com/sun/mail/util/LineInputStream解决办法在编写邮件发送相关程序时,会报错!主要原因是javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的mail.jar和activation.jar有一些出入,所以初学者在直接copy别人代码的时候往往会出现上面的错误。

JAVAMAIL发送邮件

JAVAMAIL发送邮件

JAVAMAIL发送邮件通过javaMail 发送电⼦邮件。

多附件。

多收件⼈。

源代码其中JAVAMAIL发送电⼦邮件需要的JAR包最基本的mail.jar,activation.jar 有两个⽂件发送邮件的主⽂件import java.io.UnsupportedEncodingException;import /doc/7bc1737201f69e31433294cf.html ng.reflect.Array; import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Map;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import BaseClass.ApplicationConfiguration;/*** 类MailSender.java的实现描述:邮件发送** @author chenLL 2011-9-14 下午03:06:49*/public class MailSender {* 以⽂本格式发送邮件⾃⾏设置服务器有户名* MailSenderInfo mailInfo = new MailSenderInfo();* mailInfo.setMailServerHost(SMTP服务器);* mailInfo.setMailServerPort(端⼝号);25* mailInfo.setValidate(true);是否加密* mailInfo.setUserName(登录名);* mailInfo.setPassword(SMTP邮箱密码);//您的邮箱密码* mailInfo.setFromAddress(发件⼈邮箱);* mailInfo.setToAddress(new String[] { "收件⼈1", "收件⼈2"..... });* mailInfo.setSubject("主题");(可以配置)* mailInfo.setContent("内容");* @return true 发送成功false 发送失败*/public static boolean sendTextMailInfo(MailSenderInfo mailInfo) {// 判断是否需要⾝份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {//判断是否需要⾝份验证// 如果需要⾝份认证,则创建⼀个密码验证器authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());}// 根据邮件会话属性和密码验证器构造⼀个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro, authenticator);try {// 根据session创建⼀个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getPersonName()); // 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中// Address to = new InternetAddress(mailInfo.getToAddress());//mailMessage.setRecipient(Message.RecipientType.TO,to);//创建邮件的接收地址(数组)String[] to = mailInfo.getToAddress();for (int i = 0; i < to.length; i++) {// System.out.println("发送到:" + to[i]);sendTo[i] = new InternetAddress(to[i]);}mailMessage.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo); // 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// 设置邮件消息的主要内容String mailContent = mailInfo.getContent();mailMessage.setText(mailContent);// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();} catch (UnsupportedEncodingException ex) {ex.printStackTrace();}return false;}/*** 以HTML格式发送给多⼈邮件(可带多个附件) ⾃⾏设置服务器有户名** @param mailInfo 待发送的邮件信息* MailSenderInfo mailInfo = new MailSenderInfo();* mailInfo.setMailServerHost(SMTP服务器);* mailInfo.setMailServerPort(端⼝号);25* mailInfo.setValidate(true);是否加密* mailInfo.setUserName(登录名);* mailInfo.setPassword(SMTP邮箱密码);//您的邮箱密码* mailInfo.setFromAddress(发件⼈邮箱);* mailInfo.setToAddress(new String[] { "收件⼈1", "收件⼈2"..... });* mailInfo.setSubject("主题");(可以配置)* mailInfo.setContent("HTML的内容");* @return true 发送成功false 发送失败*/public static boolean sendHtmlMailInfo(MailSenderInfo mailInfo) {// 判断是否需要⾝份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();// 如果需要⾝份认证,则创建⼀个密码验证器if (mailInfo.isValidate()) {//判断是否需要⾝份验证authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());//authenticator = new MyAuthenticator(MAIL_USERNAME, MAIL_PASSWORD);}// 根据邮件会话属性和密码验证器构造⼀个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro, authenticator);try {// 根据session创建⼀个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getPersonName()); // 设置邮件消息的发送者mailMessage.setFrom(from);/*// 创建邮件的接收者地址,并设置到邮件消息中----此可发送给⼀⼈Address to = new InternetAddress(mailInfo.getToAddress());// Message.RecipientType.TO属性表⽰接收者的类型为TOmailMessage.setRecipient(Message.RecipientType.TO,to); *///创建邮件的接收地址(数组)String[] to = mailInfo.getToAddress();InternetAddress[] sendTo = new InternetAddress[to.length];for (int i = 0; i < to.length; i++) {// System.out.println("发送到:" + to[i]);sendTo[i] = new InternetAddress(to[i]);}mailMessage.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo);mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// MiniMultipart类是⼀个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();// 创建⼀个包含HTML内容的MimeBodyPartBodyPart html = new MimeBodyPart();// 设置HTML内容建⽴第⼀部分:⽂本正⽂html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); mainPart.addBodyPart(html);// 将MiniMultipart对象设置为邮件内容建⽴第⼆部分:附件mailMessage.setContent(mainPart);if (mailInfo.getAttachFileNames().length > 0) {for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {if (!mailInfo.getAttachFileNames()[i].equals("")) {// 建⽴第⼆部分:附件html = new MimeBodyPart();// 获得附件DataSource source = new FileDataSource(mailInfo.getAttachFileNames()[i]); //设置附件的数据处理器html.setDataHandler(new DataHandler(source));// 设置附件⽂件名html.setFileName(mailInfo.getAttachFileNames()[i]);// 加⼊第⼆部分mainPart.addBodyPart(html);}}}// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();} catch (UnsupportedEncodingException ex) {}return false;}/*** 检验对象是否为空,String 中只有空格在对象中也算空.** @param object* @return 为空返回true,否则false.*/private static boolean isEmpty(Object object) {if (null == object) return true;else if (object instanceof String) return ("".equals(object.toString().trim()) || "null".equalsIgnoreCase(object.toString().trim())); else if (object instanceof ArrayList) return ((List) object).size() == 0;else if (object.getClass().isArray()) return Array.getLength(object) == 0;else if (object instanceof Map) return ((Map) object).size() == 0;else if (object instanceof Iterable) return ((Iterable) object).iterator().hasNext();else if (Number.class.isAssignableFrom(object.getClass())) return false;else if (Date.class.isAssignableFrom(object.getClass())) return false;else return false;}// public static void main(String[] args) {// //这个类主要是设置邮件// MailSenderInfo mailInfo = new MailSenderInfo();// mailInfo.setMailServerHost(邮件SMTP服务器);// mailInfo.setMailServerPort("25");// mailInfo.setValidate(true);// mailInfo.setUserName(username);//您的邮箱登录名// mailInfo.setPassword(password);//您的邮箱密码// mailInfo.setFromAddress(发件⼈邮箱);// mailInfo.set PersonName(发件⼈名称);// mailInfo.setToAddress(new String[] { "收件⼈1", "收件⼈2" });// mailInfo.setAttachFileNames(new String[] { "F:\\java\\hello.txt", "F:\\java\\Hello_Java.txt" });// mailInfo.setSubject("主题");// mailInfo.setContent("内容");// MailSender.sendTextMailInfo(mailInfo);//发送⽂体格式// // MailSender. sendHtmlMailInfo (mailInfo);//发送html格式// }发送邮件的基本配置import java.util.Properties;/*** 类MailSenderInfo.java的实现描述:发送邮件需要使⽤的基本信息配置** @author chenLL 2011-9-14 下午03:15:57*/public class MailSenderInfo {// 发送邮件的服务器的IP和端⼝private String mailServerHost;private String mailServerPort = "25";// 邮件发送者的地址private String fromAddress;// 邮件接收者的地址private String[] toAddress;// 登陆邮件发送服务器的⽤户名和密码private String userName;private String password;// 是否需要⾝份验证private boolean validate = false;// 邮件主题private String subject;// 邮件的⽂本内容private String content;// 邮件附件的⽂件名private String[] attachFileNames;// 发送邮件显⽰的发件⼈名称private String personName;/*** 获得邮件会话属性*/Properties p = new Properties();p.put("mail.smtp.host", this.mailServerHost);p.put("mail.smtp.port", this.mailServerPort);p.put("mail.smtp.auth", validate ? "true" : "false");return p;}/*** 得到邮件服务器** @return得到邮件服务器*/public String getMailServerHost() {return mailServerHost;}/*** 赋值邮件服务器*/public void setMailServerHost(String mailServerHost) { this.mailServerHost = mailServerHost; }/*** 邮件服务器端⼝** @return邮件服务器端⼝*/public String getMailServerPort() {return mailServerPort;}/*** 邮件服务器端⼝** @param mailServerPort* 邮件服务器端⼝*/public void setMailServerPort(String mailServerPort) {}/*** 是否验证服务器** @return true 验证服务器 false 不验证服务器*/public boolean isValidate() {return validate;}/*** 设置是否验证服务器** @param validate true|false*/public void setValidate(boolean validate) {this.validate = validate;}/*** 所有的附件** @return得到所有的附件*/public String[] getAttachFileNames() {return attachFileNames;}/*** 附件添加** @param fileNames 指定路径然后添加附件*/public void setAttachFileNames(String[] fileNames) { this.attachFileNames = fileNames; }/*** 得到发送地址* @return发送地址*/public String getFromAddress() {return fromAddress;}/*** 设置发送地址** @param fromAddress 发送地址*/public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; }/*** 服务器验证密码** @return服务器验证密码*/public String getPassword() {return password;}/*** 设置验证密码** @param password 验证密码*/public void setPassword(String password) { this.password = password;}/*** 服务器验证⽤户名** @return服务器验证⽤户名*/public String getUserName() {return userName;/*** 服务器验证⽤户名** @param userName服务器验证⽤户名*/public void setUserName(String userName) { /doc/7bc1737201f69e31433294cf.html erName = userName;}/*** 得到邮件主题** @return得到邮件主题*/public String getSubject() {return subject;}/*** 设置邮件主题** @param subject 邮件主题*/public void setSubject(String subject) { this.subject = subject;}/*** 得到邮件内容** @return得到邮件内容*/public String getContent() {return content;}/*** 邮件内容** @param textContent 设置邮件内容*/public void setContent(String textContent) { this.content = textContent; }/*** 发送⼈地址** @return发送⼈地址*/public String[] getToAddress() {return toAddress;}/*** 发送地址设置** @param toAddress 字符串数组发送⼈地址*/public void setToAddress(String[] toAddress) {this.toAddress = toAddress;}/*** 发送邮件显⽰的发送⼈名称** @param personName 发送⼈名称*/public void setPersonName(String personName) {this.personName = personName;}/*** 发送邮件显⽰的发送⼈名称** @return发送⼈名称*/public String getPersonName() {return this.personName;}}可以直接使⽤。

java中javamail收发邮件实现方法

java中javamail收发邮件实现方法

java中javamail收发邮件实现⽅法概述1、邮件相关的标准⼚商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:SMTP(Simple Mail Transfer Protocol) :即简单邮件传输协议,它是⼀组⽤于由源地址到⽬的地址传送邮件的规则,由它来控制信件的中转⽅式。

POP3(Post Office Protocol – Version 3) :即邮局协议版本 3 ,⽤于接收电⼦邮件的标准协议。

IMAP(Internet Mail Access Protocol) :即 Internet 邮件访问协议。

是 POP3 的替代协议。

这三种协议都有对应 SSL 加密传输的协议,分别是 SMTPS , POP3S 和 IMAPS 。

MIME(Multipurpose Internet Mail Extensions) :即多⽤途因特⽹邮件扩展标准。

它不是邮件传输协议。

但对传输内容的消息、附件及其它的内容定义了格式。

2、JavaMail 简介JavaMail 是由 Sun 发布的⽤来处理 email 的 API 。

它并没有包含在 Java SE 中,⽽是作为 Java EE 的⼀部分。

mail.jar :此 JAR ⽂件包含 JavaMail API 和 Sun 提供的 SMTP 、 IMAP 和 POP3 服务提供程序;activation.jar :此 JAR ⽂件包含 JAF API 和 Sun 的实现。

JavaMail 包中⽤于处理电⼦邮件的核⼼类是: Properties 、 Session 、 Message 、 Address 、 Authenticator 、 Transport 、 Store 等。

3、邮件传输过程如上图,电⼦邮件的处理步骤如下:创建⼀个 Session 对象。

Session 对象创建⼀个 Transport 对象 /Store 对象,⽤来发送 / 保存邮件。

java中javamail发送带附件的邮件实现方法

java中javamail发送带附件的邮件实现方法

java中javamail发送带附件的邮件实现⽅法本⽂实例讲述了java中javamail发送带附件的邮件实现⽅法。

分享给⼤家供⼤家参考。

具体分析如下:JavaMail,顾名思义,提供给开发者处理电⼦邮件相关的编程接⼝。

它是Sun发布的⽤来处理email的API。

它可以⽅便地执⾏⼀些常⽤的邮件传输,JavaMail是可选包,因此如果需要使⽤的话你需要⾸先从java官⽹上下载。

⽬前最新版本是JavaMail1.5.0,下⾯我们来看看javamail发送带附件的邮件实例mail.java 代码:复制代码代码如下:package mail;import java.util.* ;import java.io.* ;import javax.mail.* ;import javax.mail.internet.* ;import javax.activation.* ;public class Mail {//定义发件⼈、收件⼈、SMTP服务器、⽤户名、密码、主题、内容等private String displayName;private String to;private String from;private String smtpServer;private String username;private String password;private String subject;private String content;private boolean ifAuth; //服务器是否要⾝份认证private String filename="";private Vector file = new Vector(); //⽤于保存发送附件的⽂件名的集合/*** 设置SMTP服务器地址*/public void setSmtpServer(String smtpServer){this.smtpServer=smtpServer;}/*** 设置发件⼈的地址*/public void setFrom(String from){this.from=from;}/*** 设置显⽰的名称*/public void setDisplayName(String displayName){this.displayName=displayName;}/*** 设置服务器是否需要⾝份认证*/public void setIfAuth(boolean ifAuth){this.ifAuth=ifAuth;}/*** 设置E-mail⽤户名*/public void setUserName(String username){ername=username;}/*** 设置E-mail密码*/public void setPassword(String password){this.password=password;}/*** 设置接收者*/public void setTo(String to){this.to=to;}/*** 设置主题*/public void setSubject(String subject){this.subject=subject;}/*** 设置主体内容*/public void setContent(String content){this.content=content;}/*** 该⽅法⽤于收集附件名*/public void addAttachfile(String fname){file.addElement(fname);}public Mail(){}/*** 初始化SMTP服务器地址、发送者E-mail地址、⽤户名、密码、接收者、主题、内容*/public Mail(String smtpServer,String from,String displayName,String username,String password,String to,String subject,String content){this.smtpServer=smtpServer;this.from=from;this.displayName=displayName;this.ifAuth=true;ername=username;this.password=password;this.to=to;this.subject=subject;this.content=content;}/*** 初始化SMTP服务器地址、发送者E-mail地址、接收者、主题、内容*/public Mail(String smtpServer,String from,String displayName,String to,String subject,String content){ this.smtpServer=smtpServer;this.from=from;this.displayName=displayName;this.ifAuth=false;this.to=to;this.subject=subject;this.content=content;}/*** 发送邮件*/public HashMap send(){HashMap map=new HashMap();map.put("state", "success");String message="邮件发送成功!";Session session=null;Properties props = System.getProperties();props.put("mail.smtp.host", smtpServer);if(ifAuth){ //服务器需要⾝份认证props.put("mail.smtp.auth","true");SmtpAuth smtpAuth=new SmtpAuth(username,password);session=Session.getDefaultInstance(props, smtpAuth);}else{props.put("mail.smtp.auth","false");session=Session.getDefaultInstance(props, null);}session.setDebug(true);Transport trans = null;try {Message msg = new MimeMessage(session);try{Address from_address = new InternetAddress(from, displayName);msg.setFrom(from_address);}catch(java.io.UnsupportedEncodingException e){e.printStackTrace();}InternetAddress[] address={new InternetAddress(to)};msg.setRecipients(Message.RecipientType.TO,address);msg.setSubject(subject);Multipart mp = new MimeMultipart();MimeBodyPart mbp = new MimeBodyPart();mbp.setContent(content.toString(), "text/html;charset=gb2312");mp.addBodyPart(mbp);if(!file.isEmpty()){//有附件Enumeration efile=file.elements();while(efile.hasMoreElements()){mbp=new MimeBodyPart();filename=efile.nextElement().toString(); //选择出每⼀个附件名FileDataSource fds=new FileDataSource(filename); //得到数据源mbp.setDataHandler(new DataHandler(fds)); //得到附件本⾝并⾄⼊BodyPartmbp.setFileName(fds.getName()); //得到⽂件名同样⾄⼊BodyPartmp.addBodyPart(mbp);}file.removeAllElements();}msg.setContent(mp); //Multipart加⼊到信件msg.setSentDate(new Date()); //设置信件头的发送⽇期//发送信件msg.saveChanges();trans = session.getTransport("smtp");trans.connect(smtpServer, username, password);trans.sendMessage(msg, msg.getAllRecipients());trans.close();}catch(AuthenticationFailedException e){map.put("state", "failed");message="邮件发送失败!错误原因:\n"+"⾝份验证错误!";e.printStackTrace();}catch (MessagingException e) {message="邮件发送失败!错误原因:\n"+e.getMessage();map.put("state", "failed");e.printStackTrace();Exception ex = null;if ((ex = e.getNextException()) != null) {System.out.println(ex.toString());ex.printStackTrace();}}//System.out.println("\n提⽰信息:"+message);map.put("message", message);return map;}}SmtpAuth.java 代码:复制代码代码如下:package mail;public class SmtpAuth extends javax.mail.Authenticator {private String username,password;public SmtpAuth(String username,String password){ername = username;this.password = password;}protected javax.mail.PasswordAuthentication getPasswordAuthentication() {return new javax.mail.PasswordAuthentication(username,password);}}存在的问题就是发送到163的邮件全部都带有⼀个附件的符号,不管有没有发送附件,感兴趣的朋友可以对此加以改进和完善。

JavaMail_javaWeb

JavaMail_javaWeb

// // // // //
定义绑定地址 邮件服务器名称 发件人email 收件人email 邮件+"北京魔乐科技软件学院。";
// 邮件内容
java.util.Properties props = null ; props = System.getProperties(); // 设定Mail服务器和所使用的传输协议 props.put("mail.smtp.host", mailserver); props.put("mail.smtp.auth", "true"); MySecurity msec = new MySecurity("lxh", "mldnjava"); // 创建验证用户对象 Session mailSession = Session .getDefaultInstance(props, msec); // 产生新的Session mailSession.setDebug(false); // 不需要调试 Message msg = new MimeMessage(mailSession); // 创建新的邮件信息 msg.setFrom(new InternetAddress(from)); // 设定传送邮件的发信人 address = InternetAddress.parse(to, false); // 设定传送邮件至收信人的信箱 msg.setRecipients(Message.RecipientType.TO, address);// 设定邮件发送方式 msg.setSubject(subject); // 设定邮件的标题 msg.setSentDate(new Date()); // 设定发送时间 msg.setText(messageText); // 设置文字信息 Transport.send(msg, msg.getAllRecipients()); // 发送邮件

JavaMailJavaMail配置属性

JavaMailJavaMail配置属性

JavaMailJavaMail配置属性属性名含义er SMTP的缺省⽤户名。

mail.smtp.host要连接的SMTP服务器。

mail.smtp.port要连接的SMTP服务器的端⼝号,如果connect没有指明端⼝号就使⽤它,缺省值25。

mail.smtp.auth缺省是false,如果为true,尝试使⽤AUTH命令认证⽤户。

mail.transport.protocol要装⼊session的协议(smtp、pop3、imap、nntp)。

mail.smtp.connectiontimeout Socket连接超时值,单位毫秒,缺省值不超时。

mail.smtp.timeout Socket I/O超时值,单位毫秒,缺省值不超时。

mail.smtp.from SMTP MAIL使⽤的Email地址,⽤来设置邮件的return地址。

缺省是Message.getFrom()或InternetAddress.getLocalAddress()。

注意:er优先使⽤mail.smtp.localhost localhost名,缺省是 InetAddress.getLocalHost().getHostName()。

如果JDK和name service正确配置,⼀般不需设置。

mail.host邮件交互的主机。

mail.smtp.ehlo如果为false,那么不会尝试使⽤EHLO命令登录,缺省是true。

通常EHLO命令失败,会倒退到HELO命令。

这个属性只有在服务器没有fail EHLO属性或没有实现EHLO属性。

er登录邮件服务器的⽤户名(发送邮件时需要)。

mail.from发件⼈地址(发送邮件时需要)。

SMTP协议⽀持的所有属性:Name Type Descriptioner String Default user name for SMTP.mail.smtp.host String The SMTP server to connect to.mail.smtp.port int The SMTP server port to connect to, if the connect() method doesn’t explicitly specify one. Defaults to 25.mail.smtp.connectiontimeout int Socket connection timeout value in milliseconds. This timeout is implemented by .Socket. Default is infinite timeout.mail.smtp.timeout int Socket read timeout value in milliseconds. This timeout is implemented by .Socket. Default is infinite timeout.mail.smtp.writetimeout int Socket write timeout value in milliseconds. This timeout is implemented by using a java.util.concurrent.ScheduledExecutorService per connection that schedules a thread to close the socket if the timeout expires. Thus, the overhead of using this timeout is one thread per connection. Default is infinite timeout.mail.smtp.from String Email address to use for SMTP MAIL command. This sets the envelope return address. Defaults to msg.getFrom() or InternetAddress.getLocalAddress(). NOTE: er was previously used for this.mail.smtp.localhost String Local host name used in the SMTP HELO or EHLO command. Defaultsto InetAddress.getLocalHost().getHostName(). Should not normally need to be set if your JDK and your name service are configured properly.mail.smtp.localaddress String Local address (host name) to bind to when creating the SMTP socket. Defaults to the address picked by the Socket class. Should not normally need to be set, but useful with multi-homed hosts where it’s important to pick a particular local address to bind to.mail.smtp.localport int Local port number to bind to when creating the SMTP socket. Defaults to the port number picked by the Socket class.mail.smtp.ehlo boolean If false, do not attempt to sign on with the EHLO command. Defaults to true. Normally failure of the EHLO command will fallback to the HELO command; this property exists only for servers that don’t fail EHLO properly or don’t implement EHLO properly.mail.smtp.auth boolean If true, attempt to authenticate the user using the AUTH command. Defaults to false.mail.smtp.auth.mechanisms String If set, lists the authentication mechanisms to consider, and the order in which to consider them. Only mechanisms supported by the server and supported by the current implementation will be used. The default is “LOGIN PLAIN DIGEST-MD5 NTLM”, which includes all the authentication mechanisms supported by the current implementation except XOAUTH2.mail.smtp.auth.login.disable boolean If true, prevents use of the AUTH LOGIN command. Default is false. mail.smtp.auth.plain.disable boolean If true, prevents use of the AUTH PLAIN command. Default is false. mail.smtp.auth.digest-md5.disable boolean If true, prevents use of the AUTH DIGEST-MD5 command. Default is false.mail.smtp.auth.digest-md5.disable boolean If true, prevents use of the AUTH DIGEST-MD5 command. Default is false. mail.smtp.auth.ntlm.disable boolean If true, prevents use of the AUTH NTLM command. Default is false. mail.smtp.auth.ntlm.domain String The NTLM authentication domain.mail.smtp.auth.ntlm.flags int NTLM protocol-specific flags. See for details.mail.smtp.auth.xoauth2.disable boolean If true, prevents use of the AUTHENTICATE XOAUTH2 command. Because the OAuth 2.0 protocol requires a special access token instead of a password, this mechanism is disabled by default. Enable it by explicitly setting this property to “false” or by setting the “mail.smtp.auth.mechanisms” property to “XOAUTH2”.mail.smtp.submitter String The submitter to use in the AUTH tag in the MAIL FROM command. Typically used by a mail relay to pass along information about the original submitter of the message. See also the method of . Mail clients typically do not use this.mail.smtp.dsn.notify String The NOTIFY option to the RCPT command. Either NEVER, or some combination of SUCCESS, FAILURE, and DELAY (separated by commas).mail.smtp.dsn.ret String The RET option to the MAIL command. Either FULL or HDRS.mail.smtp.allow8bitmime boolean If set to true, and the server supports the 8BITMIME extension, text parts of messages that use the “quoted-printable” or “base64” encodings are converted to use “8bit” encoding if they follow the RFC2045 rules for 8bit text.mail.smtp.sendpartial boolean If set to true, and a message has some valid and some invalid addresses, send the message anyway, reporting the partial failure with a SendFailedException. If set to false (the default), the message is not sent to any of the recipients if there is an invalid recipient address.mail.smtp.sasl.enable boolean If set to true, attempt to use the javax.security.sasl package to choose an authentication mechanism for login. Defaults to false.mail.smtp.sasl.mechanisms String A space or comma separated list of SASL mechanism names to try to use.mail.smtp.sasl.authorizationid String The authorization ID to use in the SASL authentication. If not set, the authentication ID (user name) is used.mail.smtp.sasl.realm String The realm to use with DIGEST-MD5 authentication.ecanonicalhostname boolean If set to true, the canonical host name returned by is passed to the SASL mechanism, instead of the host name used to connect. Defaults to false.mail.smtp.quitwait boolean If set to false, the QUIT command is sent and the connection is immediately closed. If set to true (the default), causes the transport to wait for the response to the QUIT command.mail.smtp.reportsuccess boolean If set to true, causes the transport to include an for each address that is successful. Note also that this will cause a to be thrown from the methodof even if all addresses were correct and the message was sent successfully.mail.smtp.socketFactory SocketFactory If set to a class that implements the .SocketFactory interface, this class will be used to create SMTP sockets. Note that this is an instance of a class, not a name, and must be set using the putmethod, not the setProperty method.mail.smtp.socketFactory.class String If set, specifies the name of a class that implementsthe .SocketFactory interface. This class will be used to create SMTP sockets.mail.smtp.socketFactory.fallback boolean If set to true, failure to create a socket using the specified socket factory class will cause the socket to be created using the .Socket class. Defaults to true.mail.smtp.socketFactory.port int Specifies the port to connect to when using the specified socket factory. If not set, the default port will be used.mail.smtp.ssl.enable boolean If set to true, use SSL to connect and use the SSL port by default. Defaults to false for the “smtp” protocol and true for the “smtps” protocol.mail.smtp.ssl.checkserveridentity boolean If set to true, check the server identity as specified by . These additional checks based on the content of the server’s certificate are intended to prevent man-in-the-middle attacks. Defaults to false.mail.smtp.ssl.trust String If set, and a socket factory hasn’t been specified, enables use of a . If set to “*”, all hosts are trusted. If set to a whitespace separated list of hosts, those hosts are trusted. Otherwise, trust depends on the certificate the server presents.mail.smtp.ssl.socketFactory SSLSocketFactory If set to a class that extends the .ssl.SSLSocketFactory class, this class will be used to create SMTP SSL sockets. Note that this is an instance of a class, not a name, and must be set using theput method, notthe setProperty method.mail.smtp.ssl.socketFactory.class String If set, specifies the name of a class that extendsthe .ssl.SSLSocketFactory class. This class will be used to create SMTP SSL sockets.mail.smtp.ssl.socketFactory.port int Specifies the port to connect to when using the specified socket factory. If not set, the default port will be used.Name Type Descriptionset, the default port will be used.mail.smtp.ssl.protocols string Specifies the SSL protocols that will be enabled for SSL connections. The property value is a whitespace separated list of tokens acceptable tothe .ssl.SSLSocket.setEnabledProtocolsmethod.mail.smtp.ssl.ciphersuites string Specifies the SSL cipher suites that will be enabled for SSL connections. The property value is a whitespace separated list of tokens acceptable tothe .ssl.SSLSocket.setEnabledCipherSuitesmethod.mail.smtp.starttls.enable boolean If true, enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands. Note that an appropriate trust store must configured so that the client will trust the server’s certificate. Defaults to false.mail.smtp.starttls.required boolean If true, requires the use of the STARTTLS command. If the server doesn’t support the STARTTLS command, or the command fails, the connect method will fail. Defaults to false.mail.smtp.socks.host string Specifies the host name of a SOCKS5 proxy server that will be used for connections to the mail server. (Note that this only works on JDK 1.5 or newer.)mail.smtp.socks.port string Specifies the port number for the SOCKS5 proxy server. This should only need to be used if the proxy server is not using the standard port number of 1080.mail.smtp.mailextension String Extension string to append to the MAIL command. The extension string can be used to specify standard SMTP service extensions as well as vendor-specific extensions. Typically the application should use the method to verify that the server supports the desired service extension. See and other RFCs that define specific extensions.erset boolean If set to true, use the RSET command instead of the NOOP command in the method. In some cases sendmail will respond slowly after many NOOP commands; use of RSET avoids this sendmail issue. Defaults to false.mail.smtp.noop.strict boolean If set to true (the default), insist on a 250 response code from the NOOP command to indicate success. The NOOP command is used by the method to determine if the connection is still alive. Some older servers return the wrong response code on success, some servers don’t implement the NOOP command at all and so always return a failure code. Set this property to false to handle servers that are broken in this way. Normally, when a server times out a connection, it will send a 421 response code, which the client will see as the response to the next command it issues. Some servers send the wrong failure response code when timing out a connection. Do not set this property to false when dealing with servers that are broken in this way.Name Type Description。

JavaMail API中文文档

JavaMail API中文文档

.JavaMail APIJavaMail API的核心类:会话、消息、地址、验证程序、传输,存储和文件夹。

所有这些类都可以在JavaMail API即javax.mail的顶层包中找到,尽管你将频繁地发现你自己使用的子类是在javax.mail.internet包中找到的。

A.SessionSession类定义了基本的邮件会话。

就像Http会话那样,我们进行收发邮件的工作都是基于这个会话的。

Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。

Session类的构造方法是私有的,所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象:Properties props = new Properties();// fill props with any informationSession session = Session.getDefaultInstance(props, null);---------------------------------------------------------------------------------------------或者使用getInstance()这个静态工厂方法获得自定义的Session:Properties props = new Properties();// fill props with any informationSession session = Session.getInstance(props, null);getDefaultInstance()和getInstance()方法的第二个参数都是null,这是因为在上面的例子中并没有使用到邮件授权,下文中将对授权进行详细介绍。

javaMail发送邮件(图片,附件)

javaMail发送邮件(图片,附件)

Java类库中是带有javamail的!所有不需要再下载。

1)运行例子时会出现:Exception in thread "main" ng.NoClassDefFoundError: com/sun/mail/util/LineOutputStream这样的错误,原因是版本不兼容,后来我没有用java ee 5.0而是用j2ee1.4.自己导入mail.jar包就没有出现错误。

2)运行完书本的例子(文本,包含有图片,附件。

另外图片是分为两种,一是引用外部资源,二是嵌入内部)。

对其有个大概的了解。

下面给个完整的例子,包含有图片和附件的。

public class ComplexMessage {/***@param args*@throws MessagingException*@throws AddressException*@throws IOException*@throws FileNotFoundException*/public static void main(String[] args) throws AddressException,MessagingException, FileNotFoundException, IOException{// TODO Auto-generated method stubSession session = Session.getDefaultInstance(new Properties()); // 设置发送邮件的客户端服务器端环境MimeMessage message=createMessage( session);message.writeTo(new FileOutputStream("d:\\test3.eml"));}public static MimeMessage createMessage(Session session) throws AddressException, MessagingException{String from = "4054702459047@";String to = "4074505429047@";String subject = "test";String data = "<FONT face=宋体color=#0909f7 size=7><SPAN style='ACKGROUND-COLOR: #6911ee'><SPAN style='BACKGROUND-COLOR: #000000'><SPAN style='BACKGROUND-COLOR: #000000'><SPAN style='BACKGROUND-COLOR: #ffffff'><EM>华南理工大学</EM> </SPAN></SPAN></SPAN></SPAN></FONT>"+"<img src='cid:test1.jpg'>";Message message = new MimeMessage(session);// 创建MimeMessage实例对象message.setFrom(new InternetAddress(from));message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));message.setSentDate(new Date());message.setSubject(subject);MimeBodyPart contentPart=createContent(data,"d:\\test.jpg");MimeBodyPart attachPart1=createAttachment("d:\\xml.xml");MimeBodyPart attachPart2=createAttachment("d:\\report13.jasper");MimeMultipart multipart=new MimeMultipart("mixed");multipart.addBodyPart(contentPart);multipart.addBodyPart(attachPart1);multipart.addBodyPart(attachPart2);//这里MimeMessage是由MIME对象的消息头和MimeMultipart组成,而MimeMultipart可由//MimeBodyPart 组成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package com.mail.tool;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.text.DateFormat;import java.util.Date;import java.util.Properties;import java.util.StringTokenizer;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.Flags;import javax.mail.Folder;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.Part;import javax.mail.Session;import javax.mail.Store;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import com.mail.bean.MailBean;import erBean;import com.mail.dao.ReceiveDao;import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;public class MailManager {public int getUnreadCount(UserBean user){//读取未读邮件的个数,POP3没有此功能int count=0;try{Properties props=new Properties();//创建一个空的配置Session mailSession = Session.getInstance(props);//获取一个Session的实例mailSession.setDebug(true);Store store = mailSession.getStore("pop3");//设置接收邮件的服务器类型store.connect(user.getPop(), user.getEmail(), user.getEmailPSW());//连接服务器Folder folder = store.getFolder("INBOX");//获取收件箱中的邮件folder.open(Folder.READ_ONLY);count=folder.getUnreadMessageCount();//获取未读邮件的个数folder.close(true);store.close();}catch (Exception e) {e.printStackTrace();}return count;}//接收邮件public boolean receiveMail(UserBean user){try{Properties props=new Properties();//创建一个空的配置Session mailSession = Session.getInstance(props);//获取一个Session实例mailSession.setDebug(true);Store store = mailSession.getStore("pop3");//设置接收服务器类型store.connect(user.getPop(), user.getEmail(), user.getEmailPSW());//连接服务器Folder folder = store.getFolder("INBOX");//获取收件箱中的邮件folder.open(Folder.READ_WRITE);//打开FolderMessage message[] = folder.getMessages();//获取所有邮件ReceiveDao receiveDao = new ReceiveDao();//建立保存邮件的数据库for (int i = 0; i < message.length; i++){MailBean mail=new MailBean();mail.setFrom(((InternetAddress)message[i].getFrom()[0]).getAddress());//读取发件人mail.setTo(user.getEmail());//读取收件人mail.setTheme(message[i].getSubject());//读取邮件主题DateFormat format=DateFormat.getDateInstance(DateFormat.SHORT);//获取邮件发送日期mail.setDate(format.format(message[i].getSentDate()));/////////////////////////////////////////////////Object content = message[i].getContent();//获取邮件所有内容String textPlain=contentParser(message[i],"text/plain");//解析邮件中的文本正文String textHtml=contentParser(message[i],"text/html");//解析邮件中的html正文if(textHtml.length()>0)mail.setContent(MimeUtility.decodeText(textHtml));if(textPlain.length()>0)mail.setContent(MimeUtility.decodeText(textPlain));if (content instanceof Multipart){//获取邮件中的附件Multipart mp = (Multipart) message[i].getContent();//判断邮件是否为Multipartfor (int j = 0; j < mp.getCount(); j++){Part part = mp.getBodyPart(j);//取得Multipart中的BodyPartString disposition = part.getDisposition();if ((disposition != null)&&((disposition.equals(Part.ATTACHMENT))||(disposition.equals(Part.INLINE)))){//判断是否为附件String filename=MimeUtility.decodeText(part.getFileName());//取得附件文件的文件名File file = new File(Constants.WEB_ABS_ATTACH_PATH+ "/" + filename);//新建文件用来保存附件的文件for (int k = 0; file.exists(); k++){int index = filename.indexOf(".");String ext = filename.substring(index);file = new File(Constants.WEB_ABS_ATTACH_PATH+ "/"+ filename.substring(0, index)+ k + ext);}FileOutputStream myFileoutputstream = new FileOutputStream(file);int chunk = part.getSize();byte[] buffer = new byte[chunk];InputStream instream = part.getInputStream();instream.read(buffer, 0, chunk);myFileoutputstream.write(buffer, 0, chunk);instream.close();myFileoutputstream.close();String attach=mail.getAttachment();if(attach.length()>0)attach+=";";mail.setAttachment(attach+"attachment" + "/"+ file.getName());mail.setFlag(MailBean.UNREAD);}}}//////////////////////////////////////////////////////mail.setFlag(MailBean.UNREAD);mail.setUserID(user.getUserID());if (receiveDao.addReceive(mail))message[i].setFlag(Flags.Flag.DELETED, true);}folder.close(true);store.close();return true;}catch (Exception e){e.printStackTrace();}return false;}//发送邮件public boolean sendMail(MailBean mail,UserBean user){//发送邮件方法try{Properties props =new Properties();props.put("mail.smtp.host",user.getSmtp());//进行邮件服务器认证props.put("mail.smtp.auth","true");Session mailSession = Session.getInstance(props);mailSession.setDebug(true);MimeMessage newMessage = new MimeMessage(mailSession); newMessage.setFrom(new InternetAddress(mail.getFrom())); newMessage.setSubject(mail.getTheme());newMessage.setSentDate(new Date());InternetAddress[] toList = getToList(mail.getTo());newMessage.setRecipients(Message.RecipientType.TO, toList); BodyPart mbp = new MimeBodyPart();mbp.setContent(mail.getContent(), "text/html;charset=GBK");Multipa。

相关文档
最新文档