JavaMail API详解
- 格式:doc
- 大小:78.00 KB
- 文档页数:16
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. 创建邮件消息:然后,我们需要创建一个邮件消息对象,用于设置邮件的各种属性,如发件人、收件人、主题、内容等。
原文:/resource/article/44/44101_JavaMail.html一、JavaMail API简介JavaMail API是读取、撰写、发送电子信息的可选包。
可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA,而非邮件传输代理MTA)。
从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件的递送。
二、相关协议一览不依赖于协议的方式发送接收电子信息,只依赖特定协议SMTP、POP、IMAP、MIME、NNTP协议。
1.SMTP(递送邮件机制)简单邮件传输协议SMTP服务器将邮件转发到接收者的SMTP服务器,直至最后被接收者通过POP或者IMAP协议获取。
2.POP(获取邮件机制)邮局协议,目前为第3个版本POP33.IMAP(多目录共享)接收信息的高级协议,目前版本为第4版IMAP4接收新信息,将这些信息递送给用户,维护每个用户的多个目录。
4.MIME邮件扩展内容格式:信息格式、附件格式等等5.NNTP第三方新闻组协议三、安装1.安装JavaMail从/products/javamail/downloads/index.html下载JavaMail mail.jar文件添加到CLASSPATH中2.安装JavaBeans Activation Framework从/products/javabeans/glasgow/jaf.html下载JavaBeans Activation Frameworkactivation.jar文件添加到CLASSPATH中四、初次认识JavaMail API1.了解我们的JavaMail环境A.纵览JavaMail核心类结构JavaMail.jar文件的一些核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。
AndroidJava使⽤JavaMailAPI发送和接收邮件的代码⽰例JavaMail是Oracle甲⾻⽂开发的Java邮件类API,⽀持多种邮件协议,这⾥我们就来看⼀下Java使⽤JavaMail API发送和接收邮件的代码⽰例常⽤的类:1. javax.mail.Session; -------->保存连接服务器所需要的信息;2. javax.mail.Message; -------->邮件体,保存邮件的内容;3. javax.mail.Transport; -------->发送邮件的载体4. javax.mail.internet.InternetAddress; -------->邮件的地址信息发送邮件下边,我先列出使⽤Java发送邮件的最简单的⼀个⼩测试⽰例:import java.util.Properties;import javax.mail.Address;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;/**** QQ():POP3服务器(端⼝995)SMTP服务器(端⼝465或587)。
**/public class Demo1 {/*** @param args* @throws MessagingException*/public static void main(String[] args) throws MessagingException {String sendUserName = "wangxiangpan@";String sendPassword = "pwd";Properties properties = new Properties();properties.setProperty("mail.smtp.auth", "true");//服务器需要认证properties.setProperty("mail.transport.protocol", "smtp");//声明发送邮件使⽤的端⼝Session session = Session.getInstance(properties);session.setDebug(true);//同意在当前线程的控制台打印与服务器对话信息Message message = new MimeMessage(session);//构建发送的信息message.setText("你好,我是Champion.Wong!");//信息内容message.setFrom(new InternetAddress("wangxiangpan@"));//发件⼈Transport transport = session.getTransport();transport.connect("", 25, sendUserName, sendPassword);//连接发件⼈使⽤发件的服务器transport.sendMessage(message, new Address[]{new InternetAddress("492134880@")});//接受邮件transport.close();}}⼀般的,我们使⽤Authenticator把⽤户名和密码封装起来,不透明!所以: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.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import junit.framework.TestCase;/*** javamail 发送邮件* @author Champion Wong* Message.addRecipient(Message.Recipient recipient, Address address); 发邮件的时候指定收件⼈和收件⼈的⾓⾊* Message.RecipientType.TO 收件⼈* 抄送,即发邮件的时候顺便给另⼀个⼈抄⼀份,不⽤回复!但是,上边的收件⼈可以看到你都抄送给了谁* Message.RecipientType.BCC 暗送,也是发邮件的时候顺便给另⼀个⼈暗发⼀份,但是,不同于上边的是,收件⼈不能看到你都暗送给了谁**/public class Demo2 extends TestCase {private static final String sendUserName = "wangxiangpan@";// 发送邮件需要连接的服务器的⽤户名private static final String sendPassword = "pwd";// 发送邮件需要连接的服务器的密码private static final String sendProtocol = "smtp";// 发送邮件使⽤的端⼝private static final String sendHostAddress = "";// 发送邮件使⽤的服务器的地址public void test() throws AddressException, MessagingException {Properties properties = new Properties();properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证properties.setProperty("mail.transport.protocol", sendProtocol);// 声明发送邮件使⽤的端⼝properties.setProperty("mail.host", sendHostAddress);// 发送邮件的服务器地址Session session = Session.getInstance(properties, new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(sendUserName, sendPassword);}});session.setDebug(true);//在后台打印发送邮件的实时信息Message message = new MimeMessage(session);message.setFrom(new InternetAddress("wangxiangpan@"));message.setSubject("Demo2JavaCode发送邮件测试,采⽤Authenticator");// 设置主题message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("492134880@,wangxiangpan@"));// 发送message.setRecipients(, InternetAddress.parse("msn_wangxiangpan@"));// 抄送message.setContent("<span style="font-size:20px; color:#FFCCFF" mce_style="font-size:20px; color:#FFCCFF">如果您看到,证明测试成功了!</span>","text/html;charset=gbk");Transport.send(message);//发送邮件}}我们发送⼀个⽐较复杂的邮件,包括附件,图⽂:import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.Message.RecipientType;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;/**** @author Administrator Mr XP.Wang* MimeMultipart ⼀般电⼦邮件的容器是Multipart,定义了增加及删除电⼦邮件各部分内容的⽅法,* 但是其是抽象类,需要其⼦类MimeMultipart来时⽤MimeMessage对象* MimeBodyPart 是BodyPart具体⽤于mimeMessage的⼀个⼦类,MimeBodyPart对象代表⼀个* mimeMultipart对象的每⼀个部分* MimeUtility.encodeText(String cn)⽤于解决邮件中的头部信息中中⽂的乱码问题**/public class Demo3_test {public static void main(String[] args) throws Exception {Properties properties = new Properties();properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证properties.setProperty("mail.transport.protocol", "smtp");// 声明发送邮件使⽤的端⼝properties.setProperty("mail.host", "");// 发送邮件的服务器地址Session session = Session.getInstance(properties, new Authenticator() {String sendUserName = "wangxiangpan@";String sendPassword = "pwd";protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(sendUserName,sendPassword);}});session.setDebug(true);MimeMessage msg = new MimeMessage(session);// 声明⼀个邮件体msg.setFrom(new InternetAddress("/""+MimeUtility.encodeText("Mr XP.Wang")+"/"<wangxiangpan@>"));msg.setSubject("这是我的第⼀份复杂邮件");//设置邮件主题msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse(MimeUtility.encodeText("王翔攀")+"<wangxiangpan@>,"+MimeUtility.encodeText("三⽑")+"<492134880@>")); MimeMultipart msgMultipart = new MimeMultipart("mixed");// 标明邮件的组合关系,混合的关系msg.setContent(msgMultipart);// 设置邮件体MimeBodyPart attch1 = new MimeBodyPart();// 附件1MimeBodyPart attch2 = new MimeBodyPart();// 附件2MimeBodyPart content = new MimeBodyPart();// 邮件的正⽂,混合体(图⽚+⽂字)// 将附件和正⽂设置到这个邮件体中msgMultipart.addBodyPart(attch1);msgMultipart.addBodyPart(attch2);msgMultipart.addBodyPart(content);// 设置第⼀个附件DataSource ds1 = new FileDataSource("F:/ACCP5.0/⽂件/ssh配置.txt");// 指定附件的数据源DataHandler dh1 = new DataHandler(ds1);// 附件的信息attch1.setDataHandler(dh1);// 指定附件attch1.setFileName("ssh.txt");// 设置第⼆个附件DataSource ds2 = new FileDataSource("resource/48.jpg");// 指定附件的数据源DataHandler dh2 = new DataHandler(ds2);// 附件的信息attch2.setDataHandler(dh2);// 指定附件attch2.setFileName("48.jpg");//设置邮件的正⽂MimeMultipart bodyMultipart = new MimeMultipart("related");//依赖关系content.setContent(bodyMultipart);//指定正⽂MimeBodyPart htmlPart = new MimeBodyPart();MimeBodyPart gifPart = new MimeBodyPart();bodyMultipart.addBodyPart(htmlPart);bodyMultipart.addBodyPart(gifPart);DataSource gifds = new FileDataSource("resource/48.jpg");//正⽂的图⽚DataHandler gifdh = new DataHandler(gifds);gifPart.setHeader("Content-Location", "/logo/126logo.gif");gifPart.setDataHandler(gifdh);//设置正⽂的图⽚htmlPart.setContent("我只是来打酱油的,这是我的形象照!<img src="/" mce_src="/""/logo/126logo.gif/">", "text/html;charset=gbk");//设置正⽂⽂字 msg.saveChanges();//保存邮件//将邮件保存成⽂件OutputStream ops = new FileOutputStream("C:/Users/Administrator/Desktop/test.eml");msg.writeTo(ops);ops.close();Transport.send(msg);}}收取邮件⽰例:Rose 收取最近⼀封邮件。
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,就可以设置它的各个部分。
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邮件开发详解Java邮件开发是一项在当今信息时代非常重要的技能。
随着电子邮件在个人和商业领域的广泛应用,了解如何使用Java编程语言开发邮件应用程序是非常有价值的。
本文将详细介绍张孝祥在Java邮件开发方面的经验和技巧。
一、Java邮件开发概述邮件开发是一种基于邮件传输协议的应用程序开发技术。
它可以实现电子邮件的发送、接收和管理等功能。
Java是一种跨平台的高级编程语言,具有广泛的应用领域。
通过Java,我们可以利用已有的邮件传输协议和库来开发强大的邮件应用程序。
二、Java邮件开发的基本原理Java邮件开发的基本原理是利用Java Mail API与邮件服务器进行通信。
Java Mail API是一组用于发送和接收电子邮件的类和接口。
它提供了Java开发人员所需的一切工具,使他们能够轻松地编写邮件应用程序。
三、Java邮件开发的核心类1. Session类Session类是Java Mail API中的一个关键类,它表示一个邮件会话。
我们可以通过Session类来配置邮件服务器的连接参数,例如主机地址、端口号和认证信息等。
2. Message类Message类用于表示一封电子邮件。
我们可以通过Message类来设置邮件的发件人、收件人、主题、正文和附件等信息。
3. Transport类Transport类用于将邮件发送到邮件服务器并进行传输。
我们可以通过Transport类来发送邮件。
4. Store类Store类用于从邮件服务器接收邮件并进行存储。
我们可以通过Store类来接收和管理邮件。
四、Java邮件开发的基本步骤1. 创建一个Session对象,配置邮件服务器的连接参数。
2. 创建一个Message对象,设置邮件的发件人、收件人、主题、正文和附件等信息。
3. 使用Transport类将Message对象发送到邮件服务器。
4. 使用Store类从邮件服务器接收邮件。
五、Java邮件开发的实际应用Java邮件开发可应用于许多实际场景,例如:1. 发送邮件:可以使用Java Mail API发送电子邮件,便于快速、准确地与他人沟通。
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 API收发邮件31.JavaMail API按其功能划分通常可分为如下三大类(1)创建和解析邮件内容的API:Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
(2)发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
(3)接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
2.Session类Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。
Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
3.使用JavaMail发送一封简单的邮件创建包含邮件服务器的网络连接信息的Session对象。
创建代表邮件内容的Message对象。
创建Transport对象、连接服务器、发送Message、关闭连接。
4.实例(1)JavaMail邮件只发送内容public class SendMail{public static void main(String[]args)throws Exception{//属性文件Properties props=new Properties();//设置邮件的发送主机名、发送协议和是否验证props.setProperty("mail.host","");props.setProperty("mail.transport.protocol","smtp");props.setProperty("mail.smtp.auth","true");//获取发送接收邮件环境的对象Session session=Session.getInstance(props);Message message=createMessage(session);//创建发送邮件的对象Transport tsp=session.getTransport();tsp.connect("csdn","csdn");tsp.sendMessage(message,message.getAllRecipients());tsp.close();}public static Message createMessage(Session session)throws Exception{ //根据环境对象创建一份邮件MimeMessage message=new MimeMessage(session);//设置邮件属性message.setFrom(new InternetAddress("csdn@"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("csdn@"));message.setSubject("hello");//创建邮件体MimeBodyPart text=new MimeBodyPart();text.setContent("你好?","text/html;charset=utf-8");//设置描述关系MimeMultipart mm=new MimeMultipart();mm.addBodyPart(text);message.setContent(mm);message.saveChanges();return message;}}(2)JavaMail邮件发送内容和图片public class SendImageMail{public static void main(String[]args)throws Exception{//属性文件Properties props=new Properties();//设置邮件的发送主机名、发送协议和是否验证props.setProperty("mail.host","");props.setProperty("mail.transport.protocol","smtp");props.setProperty("mail.smtp.auth","true");//获取发送接收邮件环境的对象Session session=Session.getInstance(props);Message message=createMessage(session);//创建发送邮件的对象Transport tsp=session.getTransport();tsp.connect("csdn","csdn");tsp.sendMessage(message,message.getAllRecipients());tsp.close();}public static Message createMessage(Session session)throws Exception{ MimeMessage message=new MimeMessage(session);message.setFrom(new InternetAddress("csdn@"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("csdn@"));message.setSubject("图片");MimeBodyPart text=new MimeBodyPart();text.setContent("好看吗?<br/><imgsrc='cid:xx.jpg'>","text/html;charset=utf-8");MimeBodyPart image=new MimeBodyPart();image.setDataHandler(new DataHandler(newFileDataSource("src\\f.jpg")));image.setContentID("xx.jpg");MimeMultipart mm=new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");message.setContent(mm);message.saveChanges();return message;}}(3)JavaMail邮件发送内容、图片和附件public class SendAttchImageMail{public static void main(String[]args)throws Exception{//属性文件Properties props=new Properties();//设置邮件的发送主机名、发送协议和是否验证props.setProperty("mail.host","");props.setProperty("mail.transport.protocol","smtp");props.setProperty("mail.smtp.auth","true");//获取发送接收邮件环境的对象Session session=Session.getInstance(props);Message message=createMessage(session);//创建发送邮件的对象Transport tsp=session.getTransport();tsp.connect("csdn","csdn");tsp.sendMessage(message,message.getAllRecipients());tsp.close();}public static Message createMessage(Session session)throws Exception{ MimeMessage message=new MimeMessage(session);message.setFrom(new InternetAddress("csdn@"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("csdn@"));message.setSubject("图片");MimeBodyPart text=new MimeBodyPart();text.setContent("好看吗?<br/><imgsrc='cid:xx.jpg'>","text/html;charset=utf-8");MimeBodyPart image=new MimeBodyPart();image.setDataHandler(new DataHandler(newFileDataSource("src\\f.jpg")));image.setContentID("xx.jpg");MimeBodyPart attch=new MimeBodyPart();DataHandler dh=new DataHandler(new FileDataSource("src\\默默无语.mp3"));attch.setDataHandler(dh);String name=dh.getName();attch.setFileName(MimeUtility.encodeText(name));MimeMultipart mm=new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");MimeBodyPart part=new MimeBodyPart();part.setContent(mm);MimeMultipart m=new MimeMultipart();m.addBodyPart(part);m.addBodyPart(attch);m.setSubType("mixed");message.setContent(m);message.saveChanges();return message;}}注:邮箱地址必须是真实的。
JavaMail发送邮件(超详细)⼀:邮件发送的基本概念 本⽂我将阐述使⽤JavaMail⽅式发送和接收Email的详细说明,本博客本着以后遇到类似的邮件发送需求可以直接把代码粘过去直接使⽤,快捷⽅便省时间,对于刚接触的JavaMail的朋友们还是把⽂章过⼀遍,虽然本⽂不是最好的,但是我可以保证你能成功发送邮件; 关于邮件还有⼀些基本知识我将在下⾯简单介绍,关于邮件发送和接收的流程可以参考1:邮件中的⼏个名词发件⼈:指的是⽤哪个邮箱进⾏发送邮件的⼈收件⼈:指的是接收发件⼈发过来邮件的⼈,代表这封邮件⾯向的读者。
可以是零个到多个。
抄送⼈:指的是发件⼈把邮件发送给收件⼈的同时并抄送⼀份发给抄送⼈;此时抄送⼈可以看到收件⼈、抄送⼈的邮箱密送⼈:指的是发件⼈把邮件发送给收件⼈的同时并抄送⼀份发给密送⼈;此时抄送⼈可以看到收件⼈、抄送⼈的邮箱,⽆法看到密送⼈的邮箱说明:抄送⼈和密送⼈⼀般⽤于项⽬组A给项⽬组B发送邮件确认流程,这时项⽬组A还要告知领导我已经把⽅案流程发送给项⽬组B了;这时我就要把流程⽅案抄送⼀份给领导,就可以⽤到抄送和密送,此邮件领导是不⽤回复的2:发送邮件的⼏种⽅式JavaMail 具体使⽤说明参考Oracle官⽹给出的API:Jakarta Mail 具体使⽤说明参考Jakarta官⽅给出的API:1:javax.*也是java标准的⼀部分,但是没有包含在标准库中,⼀般属于标准库的扩展。
通常属于某个特定领域,不是⼀般性的api。
所以以扩展的⽅式提供api,以避免jdk的标准库过⼤。
当然某些早期的javax,后来被并⼊到标准库中,所有也应该属于新版本JDK的标准库。
⽐如jmx,java5以前是以扩展⽅式提供,但是jdk5以后就做为标准库的⼀部分了,所有javax.management也是jdk5的标准库的⼀部分。
2:com.sun.*是sun的hotspot虚拟机中java.* 和javax.*的实现类。
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 对象,⽤来发送 / 保存邮件。
JavaMail(JAVA邮件服务) API详解一、JavaMail API简介JavaMail API是读取、撰写、发送电子信息的可选包。
我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。
而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。
从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件的递送。
在清楚了到MUA与MTA之间的关系后,让我们看看JavaMail API是如何提供信息访问功能的吧!JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,这个API被分为两大部分:基本功能:如何以不依赖于协议的方式发送接收电子信息,这也是本文所要描述的,不过在下文中,大家将看到这只是一厢情愿而已。
第二个部分则是依赖特定协议的,比如SMTP、POP、IMAP、NNTP协议。
在这部分的JavaMail API是为了和服务器通讯,并不在本文的内容中。
二、相关协议一览在我们步入JavaMail API之前,先看一下API所涉及的协议。
以下便是大家日常所知、所乐于使用的4大信息传输协议:SMTPPOPIMAPMIME当然,上面的4个协议,并不是全部,还有NNTP和其它一些协议可用于传输信息,但是由于不常用到,所以本文便不提及了。
理解这4个基本的协议有助于我们更好的使用JavaMail API。
然而JavaMail API是被设计为与协议无关的,目前我们并不能克服这些协议的束缚。
确切的说,如果我们使用的功能并不被我们选择的协议支持,那么JavaMail API并不可能如魔术师一样神奇的赋予我们这种能力。
1.SMTP简单邮件传输协议定义了递送邮件的机制。
在下文中,我们将使用基于Java-Mail的程序与公司或者ISP的SMTP服务器进行通讯。
一、JavaMail API简介JavaMail API是读取、撰写、发送电子信息的可选包。
我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。
而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。
从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件的递送。
在清楚了到MUA与MTA之间的关系后,让我们看看JavaMail API是如何提供信息访问功能的吧!JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,这个API被分为两大部分:基本功能:如何以不依赖于协议的方式发送接收电子信息,这也是本文所要描述的,不过在下文中,大家将看到这只是一厢情愿而已。
第二个部分则是依赖特定协议的,比如SMTP、POP、IMAP、NNTP协议。
在这部分的JavaMail API是为了和服务器通讯,并不在本文的内容中。
二、相关协议一览在我们步入JavaMail API之前,先看一下API所涉及的协议。
以下便是大家日常所知、所乐于使用的4大信息传输协议:SMTPPOPIMAPMIME当然,上面的4个协议,并不是全部,还有NNTP和其它一些协议可用于传输信息,但是由于不常用到,所以本文便不提及了。
理解这4个基本的协议有助于我们更好的使用JavaMail API。
然而JavaMail API是被设计为与协议无关的,目前我们并不能克服这些协议的束缚。
确切的说,如果我们使用的功能并不被我们选择的协议支持,那么JavaMail API并不可能如魔术师一样神奇的赋予我们这种能力。
1.SMTP简单邮件传输协议定义了递送邮件的机制。
在下文中,我们将使用基于Java-Mail的程序与公司或者ISP 的SMTP服务器进行通讯。
这个SMTP服务器将邮件转发到接收者的SMTP服务器,直至最后被接收者通过POP或者IMAP协议获取。
这并不需要SMTP服务器使用支持授权的邮件转发,但是却的确要注意SMTP服务器的正确设置(SMTP服务器的设置与JavaMail API无关)。
2.POPPOP是一种邮局协议,目前为第3个版本,即众所周知的POP3。
POP定义了一种用户如何获得邮件的机制。
它规定了每个用户使用一个单独的邮箱。
大多数人在使用POP时所熟悉的功能并非都被支持,例如查看邮箱中的新邮件数量。
而这个功能是微软的Outlook内建的,那么就说明微软Outlook之类的邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。
因此在我们使用JavaMail API 时需要注意,当需要获得如前面所讲的新邮件数量之类的信息时,我们不得不自己进行计算。
3.IMAPIMAP使用在接收信息的高级协议,目前版本为第4版,所以也被称为IMAP4。
需要注意的是在使用IMAP时,邮件服务器必须支持该协议。
从这个方面讲,我们并不能完全使用IMAP来替代POP,不能期待IMAP在任何地方都被支持。
假如邮件服务器支持IMAP,那么我们的邮件程序将能够具有以下被IMAP所支持的特性:每个用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。
其与POP相比高级之处显而易见,但是在尝试采取IMAP时,我们认识到它并不是十分完美的:由于IMAP需要从其它服务器上接收新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为邮件服务器带来了高负载。
并且IMAP与POP的一个不同之处是POP用户在接收邮件时将从邮件服务器上下载邮件,而IMAP允许用户直接访问邮件目录,所以在邮件服务器进行备份作业时,由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间,这将直接导致邮件服务器上磁盘空间暴涨。
4.MIMEMIME并不是用于传送邮件的协议,它作为多用途邮件的扩展定义了邮件内容的格式:信息格式、附件格式等等。
一些RFC标准都涉及了MIME:RFC 822, RFC 2045, RFC 2046, RFC 2047,有兴趣的Matrixer可以阅读一下。
而作为JavaMail API的开发者,我们并不需关心这些格式定义,但是这些格式被用在了程序中。
5.NNTP和其它的第三方协议正因为JavaMail API在设计时考虑到与第三方协议实现提供商之间的分离,故我们可以很容易的添加一些第三方协议。
SUN维护着一个第三方协议实现提供商的列表:/products/javamail/Third_Party.html,通过此列表我们可以找到所需要的而又不被SUN提供支持的第三方协议:比如NNTP这个新闻组协议和S/MIME这个安全的MIME协议。
三、安装1.安装JavaMail为了使用JavaMail API,需要从/products/javamail/downloads/index.html下载文件名格式为javamail-[version].zip的文件(这个文件中包括了JavaMail实现),并将其中的mail.jar 文件添加到CLASSPATH中。
这个实现提供了对SMTP、IMAP4、POP3的支持。
注意:在安装JavaMail实现之后,我们将在demo目录中发现许多有趣的简单实例程序。
在安装了JavaMail之后,我们还需要安装JavaBeans Activation Framework,因为这个框架是JavaMail API 所需要的。
如果我们使用J2EE的话,那么我们并无需单独下载JavaMail,因为它存在于J2EE.jar中,只需将J2EE.jar加入到CLASSPATH即可。
2.安装JavaBeans Activation Framework从/products/javabeans/glasgow/jaf.html下载JavaBeans Activation Framework,并将其添加到CLASSPATH中。
此框架增加了对任何数据块的分类、以及对它们的处理的特性。
这些特性是JavaMail API需要的。
虽然听起来这些特性非常模糊,但是它对于我们的JavaMail API来说只是提供了基本的MIME类型支持。
到此为止,我们应当把mail.jar和activation.jar都添加到了CLASSPATH中。
当然如果从方便的角度讲,直接把这两个Jar文件复制到JRE目录的lib/ext目录中也可以。
四、初次认识JavaMail API1.了解我们的JavaMail环境A.纵览JavaMail核心类结构打开JavaMail.jar文件,我们将发现在javax.mail的包下面存在着一些核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。
而且在javax.mail.internet包中还有一些常用的子类。
B.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,这是因为在上面的例子中并没有使用到邮件授权,下文中将对授权进行详细介绍。
从很多的实例看,在对mail server进行访问的过程中使用共享的Session是足够的,即使是工作在多个用户邮箱的模式下也不例外。
C.Message当我们建立了Session对象后,便可以被发送的构造信息体了。
在这里SUN提供了Message类型来帮助开发者完成这项工作。
由于Message是一个抽象类,大多数情况下,我们使用javax.mail.internet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。
信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。
为了建立一个MimeMessage对象,我们必须将Session对象作为MimeMessage构造方法的参数传入:MimeMessage message = new MimeMessage(session);注意:对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。
在建立了MimeMessage对象后,我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。
最基本的设置信息内容的方法就是通过表示信息内容和米么类型的参数调用setContent()方法:message.setContent("Hello", "text/plain");然而,如果我们所使用的MimeMessage中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容。
message.setText("Hello");前面所讲的两种方法,对于文本信息,后者更为合适。
而对于其它的一些信息类型,比如HTML信息,则要使用前者。
别忘记了,使用setSubject()方法对邮件设置邮件主题:message.setSubject("First");D.Address到这里,我们已经建立了Session和Message,下面将介绍如何使用邮件地址类:Address。
像Message一样,Address类也是一个抽象类,所以我们将使用javax.mail.internet.InternetAddress这个子类。