关于JavaMail的实现方式

首先导入javamail的jar包

		<!-- java mail -->
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.5.0-b01</version>
        </dependency>
	    <!--  java mail end -->

java具体实现代码

package com.sharp.slc.common;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPStore;

public class ReadMail {
	private MimeMessage mimeMessage = null;
	private StringBuffer bodyText = new StringBuffer(); // 存放邮件内容的StringBuffer对象
	private String dateFormat = "yy-MM-dd HH:mm"; // 默认的日前显示格式
	private static String host = AgentConfig.getJavamailValue("host");
	private static String userName = AgentConfig.getJavamailValue("userName");
	private static String passWord = AgentConfig.getJavamailValue("passWord");
	private static IMAPFolder folder;
	private static IMAPStore store;

	/**
	 * 构造函数,初始化一个MimeMessage对象
	 */
	public ReadMail() {
	}

	public ReadMail(MimeMessage mimeMessage) {
		this.mimeMessage = mimeMessage;
	}

	public void setMimeMessage(MimeMessage mimeMessage) {
		this.mimeMessage = mimeMessage;
	}

	  /**
	   * 获得发件人的地址和姓名
	   */
	  public String getFrom() throws Exception {
	      InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();
	      String from = address[0].getAddress();
	      if (from == null)
	          from = "";
	      String personal = address[0].getPersonal();
	      if (personal == null)
	          personal = "";
	      String fromaddr = personal + "<" + from + ">";
	      return fromaddr;
	  }     

	  /**
	   * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
	   */
	  public String getMailAddress(String type) throws Exception {
	      String mailaddr = "";
	      String addtype = type.toUpperCase();
	      InternetAddress[] address = null;
	      if (addtype.equals("TO") || addtype.equals("CC")|| addtype.equals("BCC")) {
	          if (addtype.equals("TO")) {
	              address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);
	          } else if (addtype.equals("CC")) {
	              address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);
	          } else {
	              address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);
	          }
	          if (address != null) {
	              for (int i = 0; i < address.length; i++) {
	                  String email = address[i].getAddress();
	                  if (email == null)
	                      email = "";
	                  else {
	                      email = MimeUtility.decodeText(email);
	                  }
	                  String personal = address[i].getPersonal();
	                  if (personal == null)
	                      personal = "";
	                  else {
	                      personal = MimeUtility.decodeText(personal);
	                  }
	                  String compositeto = personal + "<" + email + ">";
	                  mailaddr += "," + compositeto;
	              }
	              mailaddr = mailaddr.substring(1);
	          }
	      } else {
	          throw new Exception("Error emailaddr type!");
	      }
	      return mailaddr;
	  }   

	/**
	 * * 获得邮件主题
	 */
	public String getSubject() throws MessagingException {
		String subject = "";
		try {
			subject = MimeUtility.decodeText(mimeMessage.getSubject());
			if (subject == null) {
				subject = "";
			}
		} catch (Exception exce) {
			exce.printStackTrace();
		}
		return subject;
	}

	/**
	 * * 获得邮件发送日期
	 */
	public String getSentDate() throws Exception {
		Date sentDate = mimeMessage.getSentDate();
		SimpleDateFormat format = new SimpleDateFormat(dateFormat);
		String strSentDate = format.format(sentDate);
		return strSentDate;
	}

	/**
	 * * 获得邮件正文内容
	 */
	public String getBodyText() {
		return bodyText.toString();
	}

	/**
	 * * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 *
	 * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
	 */
	public void getMailContent(Part part) throws Exception {
		String contentType = part.getContentType();
		int nameIndex = contentType.indexOf("name");
		boolean conName = false;
		if (nameIndex != -1) {
			conName = true;
		}
		if (part.isMimeType("text/plain") && conName == false) {
			// text/plain 类型
			bodyText.append((String) part.getContent());
		} else if (part.isMimeType("multipart/*")) {
			// multipart/*
			Multipart multipart = (Multipart) part.getContent();
			int counts = multipart.getCount();
			for (int i = 0; i < counts; i++) {
				getMailContent(multipart.getBodyPart(i));
			}
		} else if (part.isMimeType("message/rfc822")) {
			// message/rfc822
			getMailContent((Part) part.getContent());
		}
	}

	/**
	 * * 设置日期显示格式
	 */
	public void setDateFormat(String format) throws Exception {
		this.dateFormat = format;
	}

  /**
   * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】
   */
	public boolean isNew() throws MessagingException {
	      boolean isnew = false;
	      Flags flags = ((Message) mimeMessage).getFlags();
	      Flags.Flag[] flag = flags.getSystemFlags();
	      for (int i = 0; i < flag.length; i++) {
	          if (flag[i] == Flags.Flag.SEEN) {
	              isnew = true;
	              break;
	          }
	      }
	      return isnew;
	  }     

    /**
     * get all email message
     * @param subjectType
     * @return
     * @throws Exception
     */
	public static Message[] getMsg() throws Exception {
		Properties props = new Properties();
		props.setProperty("mail.store.protocol", "imap");
		props.setProperty("mail.imap.host", host);
		props.setProperty("mail.imap.port", "143");
		Session session = Session.getInstance(props);
		store = (IMAPStore)session.getStore("imap"); // 使用imap会话机制,连接服务器
		store.connect(userName, passWord);
		folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱
		folder.open(Folder.READ_WRITE);
		Message[] messages = folder.getMessages();
		System.out.println("邮件数量: " + messages.length);
		return messages;
	}

	/**
	 * close current folder
	 */
	public static void closeFolder(){
		try {
			if(folder != null) {
			folder.close(true);
			}
			if(store!=null) {
			store.close();
			}
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}

}
时间: 2024-10-17 22:44:10

关于JavaMail的实现方式的相关文章

【Mail】Tomcat提供JNDI方式支持JavaMail(三)

流程介绍 Tomcat提供了JavaMail的支持,是通过JNDI的方式实现的,具体流程是: Tomcat启动的时候,自身产生一个Session对象,放在JNDI容器中给其他项目调用,其他项目只要通过JNDI API就能获取JNDI中的对象,并在项目中使用. 使用步骤 配置JNDI资源:新建一个javaweb的maven项目,并在webapp/META-INF中新建一个文件context.xml. context.xml文件内容如下: 1 <Context> 2 <Resource na

android pop3与imap方式接收邮件(javamail)

需要下载3个jar包:mail.jar/    activation.jar/    additionnal.jar 1.pop3 [html] /** * 以pop3方式读取邮件,此方法不能读取邮件是否为已读,已经通过测试 * */ private void getEmail() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { Properties

All About JAVA javamail的pop3以及IMAP方式读取未读邮件等操作

/** * 可以在props下设置认证信息,协议和端口信息,超时等信息,这样在store.connect的时候可以根 * 据props里是否设置了认证信息来选择不带参数的connect()或者如下有参数的connect(...)方法 * store.connect(user, password); store.connect(host, user, password); */ Properties props = System.getProperties(); props.setProperty

JavaWeb:JavaMail

邮件协议 1.收发邮件 发邮件大家都会吧!发邮件是从客户端把邮件发送到邮件服务器,收邮件是把邮件服务器的邮件下载到客户端. 我们在163.126.QQ.sohu.sina等网站注册的Email账户,其实就是在邮件服务器中注册的.这些网站都有自己的邮件服务器. 2.邮件协议概述 与HTTP协议相同,收发邮件也是需要有传输协议的. SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议: POP3:(Post Office Protocol Versio

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

JavaMail如何保证邮件发送成功

使用过JavaMail的api发送邮件的人可能会有这样一个疑惑:我如何知道我调用该api发送的邮件是否成功呢?一般的开放的api给我们调用都会有个返回值或者状态码,来告诉我们执行成功与否.但是JavaMail却没有提供这样一个返回值. 所以在调用JavaMail发送邮件的时候,我们只能通过catch异常的方式来判断邮件是否发送成功.我们认为只要没有异常发生,那么邮件就能发送成功.那么我们就来分析一下JavaMail为什么没有提供返回值,和通过异常判断邮件发送成功状态是否靠谱. JavaMail发

使用JavaMail发送邮件,465端口开启ssl加密传输

package com.wangxin.test; import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; i

javamail发送邮件服务

一.需求 最近给一个朋友做了一个积分商城,主要是通过后台管理商品兑换信息,移动端使用微信公众号,用户想要要在移动端提供商品售后服务功能,客户从移动端发起售后服务,调用发送邮件的服务及时将需要告知的内容发送给商家客服人员: 二.实现方式 在项目中引用javamail jar包,从传统的实现方式我作了些改变,首先是要去设置一个发送邮件的账号,设置方法:账号邮箱账号>设置>账号,开启此项目服务: 通过账号的手机发送指定的短信内容,收到验证密码,作用为发送邮件的服务器账号. 再指定一个为客服收邮件的账

javamail之实现注册激活邮件

需要的jar包 1.mysql驱动包 2.mail.jar包 SMTP和POP3协议概述 SMTP协议称为简单邮件传输协议,是一组用于从原地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/IP的协议簇,SMTP是负责邮件服务器之间的寄信的通信协定 POP3协议称为邮局协议版本3,也是TCP/IP协议簇的一员,基于POP3协议的服务器是用来接收信件的.每个Email地址一般只有一个如果想要同时收取多个邮箱的信件,就需要挨个设置每个邮箱的POP3服务器地址 核心代码实现