博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javamail使用总结
阅读量:6998 次
发布时间:2019-06-27

本文共 5913 字,大约阅读时间需要 19 分钟。

hot3.png

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协议。

204831_nHeG_2246410.jpg

    1.3 模块

        a)通用类

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

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

221940_Ptui_2246410.png

            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("123@163.com", "123");			}		});		// 四、地址:		// 4.1.发送地址:这里是邮件服务器地址		// Address addressfrom = new InternetAddress("xxxx@163.com");		// Address addressFrom=new InternetAddress("xxxx@qq.com","sender");//名字和邮件显示在一起		Address addressFrom = new InternetAddress("xxxx@qq.com", MimeUtility.encodeText("发送者"));// 格式化中文信息		// 4.2.接受者		Address addressToOne = new InternetAddress("xxxx1@qq.com", MimeUtility.encodeText("发送者1"));		Address[] addressToCopy = { new InternetAddress("xxxx2@qq.com", MimeUtility.encodeText("发送者2")),				new InternetAddress("xxxx3@qq.com", MimeUtility.encodeText("发送者3")),				new InternetAddress("xxxx4@qq.com", 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("

我是html

", "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("123@163.com", "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);// 超时设置	}

转载于:https://my.oschina.net/u/2246410/blog/601103

你可能感兴趣的文章
Vorlon.js:一款JavaScript远程调试和测试工具
查看>>
JetBrains在CLion的Linux和OS X版本中引入Swift支持
查看>>
那家CTO带头喊麦的直播公司,快要倒闭了
查看>>
AMD推出7nm高端显卡Radeon VII,直指英伟达RTX 2080
查看>>
大厂前端高频面试问题与答案精选
查看>>
年终总结,程序员票选最喜欢的编程语言花落谁家?
查看>>
Uber宣布重启无人车路测,但规模变小、速度降低
查看>>
linux基础命令介绍六:网络
查看>>
[你不知道的 JavaScript 类型和语法] 第一章:类型
查看>>
微软可能是全球最大的开源贡献者,但开发者似乎并不买账
查看>>
浅谈 iOS 之 Crash log 符号化
查看>>
npm 企业版 npm Enterprise 正式发布,主打安全性
查看>>
Jenkins部署码云SpringBoot项目
查看>>
洛谷 P1318 积水面积
查看>>
本地git仓库提交远程失败的解决办法
查看>>
理解alivc_framework 状态机
查看>>
性能优化技巧 - 程序游标
查看>>
让DBA不再从入门到放弃,落地SQL审核的正确路径 ...
查看>>
2019年20个最佳Python人工智能和机器学习开源工具(项目) ...
查看>>
Oracle 一次疑似Bug 14283239 - High CPU/IO for dictionary SQL against SYSAUTH$的处理
查看>>