JavaMail
- 格式:doc
- 大小:28.00 KB
- 文档页数:4
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. 创建邮件消息:然后,我们需要创建一个邮件消息对象,用于设置邮件的各种属性,如发件人、收件人、主题、内容等。
邮件客户端使用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组件的简单介绍一、什么是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实现发送邮件,图⽚,附件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 服务器。
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开发<精通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概述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协议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详解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概述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发送电⼦邮件需要的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收发邮件实现⽅法概述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发送带附件的邮件实现⽅法。
分享给⼤家供⼤家参考。
具体分析如下: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的邮件全部都带有⼀个附件的符号,不管有没有发送附件,感兴趣的朋友可以对此加以改进和完善。
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。