javamail使用总结

javamail使用总结

一、概述

    1.1 简介

        javamail主要是通过STMP、POP协议和邮件服务器交换数据,从而达到发送、接受邮件的。javamail的核心由两大类:1、发送:连接会话、服务器验证、发送地址、邮件信息、发送类。2、接受:服务器连接、消息。

    1.2 STMP和POP3

        a)STMP和POP3是网络协议中应用层部分,和HTTP是同层。

        b)SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰

        c)POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。

javamail使用总结_第1张图片

    1.3 模块

        a)通用类

            javax.mail.Session:会话类是JavaMail API的主要类,它不创建子类。 Session 对象充当连接工厂的JavaMail API,它可以同时处理配置设置和身份验证。会话类是JavaMail API的主要类,它不创建子类。 Session 对象充当连接工厂的JavaMail API,它可以同时处理配置设置和身份验证。有点像socket,无论是发送还是接受都需要这个类

            java.util.Properties:设置通信协议、主机地址、端口、身份认证等.

javamail使用总结_第2张图片

            javax.mail.Authenticator:邮件服务器分配的账户信息。是抽象了,需要继承实现getPasswordAuthentication()获得PasswordAuthentication。

        a)发送相关类

            javax.mail.Address:发送地址(邮件服务器账户)、接受者地址。

            javax.mail.internet.MimeMessage:邮件内容、包括邮件的所有信息.

            javax.mail.Transport:发送器

        b)接受相关类

            javax.mail.Store:pop3对象,相当于邮箱。

            javax.mail.Folder:邮箱里面的文件夹对象。

            javax.mail.Message:邮件。

二、实例

        2.1 发送

public void TestSend() throws Exception {
		// 一.邮件服务器网络设置
		Properties props = new Properties();
		this.setPropertis(props);

		// 二.连接session
		Session session = Session.getInstance(props, new Authenticator() {
			// 三.由于authenticator是抽象了
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("[email protected]", "123");
			}
		});

		// 四、地址:
		// 4.1.发送地址:这里是邮件服务器地址
		// Address addressfrom = new InternetAddress("[email protected]");
		// Address addressFrom=new InternetAddress("[email protected]","sender");//名字和邮件显示在一起
		Address addressFrom = new InternetAddress("[email protected]", MimeUtility.encodeText("发送者"));// 格式化中文信息
		// 4.2.接受者
		Address addressToOne = new InternetAddress("[email protected]", MimeUtility.encodeText("发送者1"));
		Address[] addressToCopy = { new InternetAddress("[email protected]", MimeUtility.encodeText("发送者2")),
				new InternetAddress("[email protected]", MimeUtility.encodeText("发送者3")),
				new InternetAddress("[email protected]", MimeUtility.encodeText("发送者4")) };

		// 五、消息:<邮件消息格式>
		Message message = new MimeMessage(session);// 创建消息
		// 5.1发送者
		message.setFrom(addressFrom);
		// 5.2 接受者
		/**
		 * @See 发送设置 Message.RecipientType.TO:收信人 Message.RecipientType.CC:抄送人
		 *      <复制一份> Message.RecipientType.BCC:暗发人<复制一份>
		 */
		message.setRecipient(Message.RecipientType.TO, addressToOne);
		// message.setRecipients(Message.RecipientType.CC, addressToCopy);//重复发送
		message.setSubject("你好啊");// 主题
		// 内容
		this.setMessageContent(message);
		// 发送:
		Transport.send(message);
	}

	/**
	 * @see 设置网络信息
	 * @param props
	 */
	private void setPropertis(Properties props) {
		props.put("mail.stmp.host", "smtp.163.com");// 邮件地址
		props.put("mail.smtp.port", 25); // 邮件端口
		props.put("mail.stmp.auth", true);// 开启认证(需要服务器账户密码)
		props.put("mail.smtp.starttls.enable", true);// 开启ssl认证
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 启用ssl的socket服务
		props.put("mail.smtp.socketFactory.fallback", true);// 开启回滚
		props.put("mail.stmp.timeout", 0);// 超时设置
	}

	public void setMessageContent(Message message) throws MessagingException {
		// 1.普通
		// message.setText("我是普通内容内容");

		// 2.带html内容
		//message.setContent("<h1>我是html<h2>", "text/html");

		// 3.带附件:如果带附件、则正文和附件都降以 MimeBodyPart形式存在
		MimeMultipart mmt = new MimeMultipart();// 附件
		// 普通附件
		MimeBodyPart mbp1 = new MimeBodyPart();
		mbp1.setText("我是正文");
		mmt.addBodyPart(mbp1);
		
		// 文本附件<文件、图片>
		MimeBodyPart mbp2 = new MimeBodyPart();
		String filename = "/home/manisha/file.txt";
		FileDataSource fds = new FileDataSource(filename);//附件的数据源
		mbp2.setDataHandler(new DataHandler(fds));//将附件添加到bodypart
		mbp2.setFileName(filename);//设置附件名称
		
		mmt.addBodyPart(mbp2);//将附件内容添加到附件
		message.setContent(mmt);
	}

    2.2 接受者    

public void TestSend() throws Exception {
		// 一.邮件服务器网络设置
		Properties props = new Properties();
		this.setPropertis(props);

		// 二.连接session
		Session session = Session.getInstance(props, new Authenticator() {
			// 三.由于authenticator是抽象了
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("[email protected]", "123");
			}
		});

		//  四、 接受者
		Store store = session.getStore("pop3s");
		store.connect();//连接
		
		// 五、邮件消息文件夹
		Folder emailFolder = store.getFolder("INBOX");
		/**
		 * @see 文件夹的处理方式
		 * Folder.READ_ONLY:只读
		 * Folder.READ_WRITE:读写
		 * Folder.HOLDS_FOLDERS:包涵其它的文件夹
		 * Folder.HOLDS_MESSAGES:包涵其它的邮件
		 */
		emailFolder.open(Folder.HOLDS_MESSAGES);

		// 六、邮件消息
		Message[] messages = emailFolder.getMessages();
		System.out.println("messages.length---" + messages.length);
		for (int i = 0, n = messages.length; i < n; i++) {
			Message message = messages[i];
			System.out.println("---------------------------------");
			System.out.println("Email Number " + (i + 1));
			System.out.println("Subject: " + message.getSubject());
			System.out.println("From: " + message.getFrom()[0]);
			System.out.println("Text: " + message.getContent().toString());
		}
		// 关闭文件夹
		emailFolder.close(false);
		//关闭连接
		store.close();
	}

	/**
	 * @see 设置网络信息
	 * @param props
	 */
	private void setPropertis(Properties props) {
		props.put("mail.stmp.host", "smtp.163.com");// 邮件地址
		props.put("mail.smtp.port", 25); // 邮件端口
		props.put("mail.stmp.auth", true);// 开启认证(需要服务器账户密码)
		props.put("mail.smtp.starttls.enable", true);// 开启ssl认证
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 启用ssl的socket服务
		props.put("mail.smtp.socketFactory.fallback", true);// 开启回滚
		props.put("mail.stmp.timeout", 0);// 超时设置
	}


你可能感兴趣的:(javamail)