`
maimode
  • 浏览: 416223 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaMail API 入门

阅读更多

JavaMail API提供了邮件处理的框架,我们可以再此基础上封装成适合自己使用的邮件收发组件。

下面提供一个最简单的使用例子,此示例介绍了支持SSL方式的应用,如果不使用SSL可以根据注释,去除相关语句:

 

 

package example.mail;

import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.FetchProfile;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.URLName;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

public class Test {
	
	private String username = "";//邮箱账户名 如: abc@qq.com
	private String password = "";//邮箱密码
	private String toAdd = "";//收件人电子邮箱地址 如:hello@qq.com
	
	//发送邮件测试
	public void sendSSLMail() throws AddressException, MessagingException{
		//若启用SSL,需要注册安全传输的提供者
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
		final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
		
		//发送邮件必须的配置
		Properties props = System.getProperties();		
		props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);//若启用SSL,需要设置,否则不设置此项
		props.setProperty("mail.smtp.socketFactory.fallback", "false");//若启用SSL,需要设置,否则不设置此项
		props.setProperty("mail.smtp.socketFactory.port", "465");//若启用SSL,需要设置,否则不设置此项
		props.setProperty("mail.smtp.host", "smtp.qq.com");		
		props.setProperty("mail.smtp.port", "465");	  	
	  	props.put("mail.smtp.auth", "true");
	  	props.put("mail.debug", "true");
	  	final String username = this.username;//账户名称
	  	final String password = this.password;//密码
	  		
	  	//获取会话
	  	Session session = Session.getDefaultInstance(props, new Authenticator(){
	  		@Override
	  		protected PasswordAuthentication getPasswordAuthentication() {
	  			// TODO Auto-generated method stub
	  			return new PasswordAuthentication(username, password);
	  		}
	  	});

       //创建消息
	  	Message msg = new MimeMessage(session);
	  	//设置发件人,收件人等信息
	  	msg.setFrom(new InternetAddress(username));
	  	msg.setRecipients(Message.RecipientType.TO, 
	  			InternetAddress.parse(this.toAdd, false));
	  	msg.setSubject("Hello");
	  	msg.setText("How are you");
	  	msg.setSentDate(new Date());
	  	
	  	//调用传输接口发送邮件消息
	  	Transport.send(msg);
  
	  	System.out.println("Message sent.");
	}	
	
	//邮件接收测试
	public void receivePOPSSLMail() throws MessagingException, UnsupportedEncodingException{
		//若启用SSL,需要注册安全传输的提供者
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());  
		final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";  
		  
		//接收邮件必须的配置
		Properties props = System.getProperties();  
		props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); //若启用SSL,需要设置,否则不设置此项
		props.setProperty("mail.pop3.socketFactory.fallback", "false");  //若启用SSL,需要设置,否则不设置此项
		props.setProperty("mail.pop3.socketFactory.port", "995");  //若启用SSL,需要设置,否则不设置此项
		props.setProperty("mail.pop3.port", "995");  
	  
		//获取会话
		Session session = Session.getInstance(props);  
	  
		//接收邮箱的信息
		URLName urln = new URLName("pop3","pop.qq.com",995,null,  
				this.username, this.password);  
		Store store = session.getStore(urln);  
		Folder inbox = null;  
		try {  
			store.connect();  
			inbox = store.getFolder("INBOX");  
			inbox.open(Folder.READ_WRITE);  //以读写方式打开时才能执行写标记动作
			FetchProfile profile = new FetchProfile();  
			profile.add(FetchProfile.Item.ENVELOPE);  
			Message[] messages = inbox.getMessages();  
			inbox.fetch(messages, profile);  
			System.out.println("邮件个数" + messages.length);  
			
			//遍历所有邮件
			for (int i = 0; i < messages.length; i++) {  
				//解析一封邮件
				String from = decodeText(messages[i].getFrom()[0].toString()); //发件人
				InternetAddress ia = new InternetAddress(from);  //解析发件人地址
				System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');  
				//其他信息				
				System.out.println("TITLE:" + messages[i].getSubject());  
				System.out.println("SIZE:" + messages[i].getSize());  
				System.out.println("DATE:" + messages[i].getSentDate());  
				
				messages[i].setFlag(Flags.Flag.DELETED, false);//设置删除标记
			}  
		} finally {  
			try {  
				inbox.close(true);  
				store.close();
			} catch (Exception e) {}  
			try {  
				store.close();  
			} catch (Exception e) {}  
	  }  
	}
	
	protected static String decodeText(String text)  throws UnsupportedEncodingException {
	  if (text == null)  
	   return null;  
	  if (text.startsWith("=?GB") || text.startsWith("=?gb"))  
	   text = MimeUtility.decodeText(text);  
	  else  
	   text = new String(text.getBytes("ISO8859_1"));  
	  return text;  
	}  

	/**
	 * @param args
	 * @throws MessagingException 
	 * @throws AddressException 
	 * @throws UnsupportedEncodingException 
	 */
	public static void main(String[] args) throws AddressException, MessagingException, UnsupportedEncodingException {
		Test t = new Test();
		t.sendSSLMail();//发送邮件
//		t.receivePOPSSLMail();	//接收邮件
	}

}

 总结:

1.若使用pop3协议收取邮件,网上查阅许多资料,貌似不支持对邮件进行已读和未读等标记。因此,只能全部收取然后全部删除,自己来处理对邮件标记的繁杂工作。(IMAP4协议支持)

分享到:
评论

相关推荐

    javamail简单入门(相信一看就懂!)

    JavaMail API 是一个用于在Java应用程序中处理电子邮件的库,提供了与邮件协议无关的方式来发送、接收和管理邮件。这个API的初衷是创建类似Eudora、Pine和Microsoft Outlook这样的邮件用户代理(MUA),允许用户与...

    James+Javamail构建邮件服务

    - **Javamail API**:这是一个用于处理电子邮件的标准扩展包,支持创建、读取和发送电子邮件。Javamail API支持各种互联网邮件协议,例如SMTP、POP、IMAP、MIME、NNTP、S/MIME等。开发者可以利用Javamail API来构建...

    javamail入门1--发送简单的文本邮件

    这个入门教程将带你了解如何使用 JavaMail 来发送简单的文本邮件。在开始之前,你需要确保已经添加了 JavaMail 相关的库,这里提到的 "lib" 文件可能包含了这些必要的 JAR 包。 首先,你需要引入 JavaMail 的核心库...

    JavaMail 1.5.5 包含说明文档 官网最新

    JavaMail 是一个开源的 Java API,它允许 Java 程序员通过标准的邮件协议(如 SMTP、POP3 和 IMAP)发送、接收和管理电子邮件。这个压缩包包含的是 JavaMail 的版本 1.5.5,是针对 Java 开发者的强大工具,尤其在...

    JavaMail必备工具

    5. **JavaMail入门必备** 这个压缩包中的所有资源都是针对初学者设计的,旨在帮助他们快速掌握JavaMail的基础知识。通过学习这些资料,新手可以了解如何配置邮件服务器,创建和发送简单的邮件,以及如何逐步过渡到...

    JavaMail入门教程之创建邮件(2)

    总的来说,JavaMail提供了一套完整的API来处理邮件的创建、发送和接收,通过`MimeMessage`、`Session`和`Properties`等类,开发者可以灵活地构建各种类型的电子邮件。在实际应用中,可以根据具体需求调整配置,实现...

    java邮件开发源代码

    1. **JavaMail API**: JavaMail API是Java平台用于处理邮件的核心库,它提供了创建、发送和接收邮件的接口。这个API包括了javax.mail和javax.mail.internet两个主要包,包含了许多类和接口,如Message、Session、...

    JavaMail相关Jar包

    JavaMail 是一个开源的Java库,它为Java程序员提供了发送、接收和操作电子邮件的强大功能。在Java应用程序中发送...它们提供了一套完整的API,使得开发者无需深入了解底层邮件协议,即可轻松地在应用中集成邮件功能。

    JavaMail入门教程之接收邮件(4)

    以上就是JavaMail入门教程中接收邮件的基本步骤和关键知识点,通过这个教程,开发者可以学会如何使用JavaMail API实现邮件的接收功能。在实际应用中,可能还需要处理更多细节,如错误处理、邮件过滤、附件读取等,但...

    spring结合javamail开发文档

    #### 一、JavaMail快速入门 ##### 1.1 JavaMail概述 JavaMail是一套由Sun Microsystems定义的API集合,主要用于在Java应用程序中发送与接收电子邮件。尽管JavaMail功能强大且灵活,但由于其API设计较为复杂,并且...

    JavaMail入门教程之发送邮件(3)

    在JavaMail入门教程之发送邮件(3)中,我们将重点学习如何使用JavaMail API来发送邮件。以下是一些关键知识点: 1. **Transport 类**:在JavaMail API中,`Transport` 类是负责实际发送邮件的核心组件。它实现了...

    JavaMail入门教程之解析邮件(5)

    本教程将详细介绍如何使用JavaMail API解析邮件。 首先,要解析邮件,我们需要获取到邮件的基本信息。这可以通过调用`Message`对象的方法实现。例如,`Message.getFrom()`用于获取发件人的地址,`Message....

    发邮件demo ,学习发邮件好帮手 java

    1. JavaMail API:JavaMail API是Java中用于处理邮件的库,它提供了一套完整的邮件服务接口,包括创建、发送和接收邮件。在Java中使用JavaMail API,可以实现SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP...

    通过Java发送Email ,简单入门。

    首先,我们需要导入JavaMail API库,它提供了发送邮件所需的所有功能。在你的`pom.xml`(如果你使用的是Maven)或者`build.gradle`(如果你使用的是Gradle)文件中,添加以下依赖: ```xml &lt;!-- Maven --&gt; ...

    JavaEE5.API

    8. **JAF(JavaBeans Activation Framework)**和**JavaMail API**:这两者主要用于邮件服务和处理MIME类型的数据。 9. **JAX-RPC(Java API for XML-based RPC)**和**JAX-WS(Java API for XML Web Services)**...

    AKSA_UBL_Attendance

    适用于Android的JavaMail API 使用JavaMailAPI在Android中使用gmail帐户发送电子邮件的示例JavaMail API文档先决条件Android SDK v10入门该项目使用Gradle构建系统。 要构建此项目,请使用“ gradlew build”命令或...

    J2EE_5.0 api J2EE_5.0 api J2EE_5.0 api

    7. **JavaMail API**: 用于发送和接收电子邮件,支持SMTP、POP3和IMAP协议。 8. **Java Management Extensions (JMX) 1.2**: JMX用于监控和管理Java应用程序,包括配置、性能统计和故障诊断等功能。 9. **Java ...

    jsp入门课件

    总结起来,这门JSP入门课程涵盖了Servlet的基本原理和操作,会话跟踪技术,以及如何结合JavaMail API发送邮件。同时,通过学习表达式语言EL,能更高效地在JSP页面中处理数据。这些知识是成为JSP开发者的基础,对于...

    J2EE API V5.0

    9. **JavaMail API**:J2EE 5.0提供了JavaMail API,用于发送和接收电子邮件,支持SMTP、POP3和IMAP协议。 10. **Web Services**:J2EE 5.0支持SOAP和RESTful Web服务的开发,包括JAX-WS和JAX-RS规范,方便应用程序...

Global site tag (gtag.js) - Google Analytics