1.JavaMail介绍

JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。

2.JavaMail API

JavaMail API按照功能分为三类:

1.创建和解析邮件的API

2.发送邮件的API

3.接收邮件的API

JavaMail API的四个核心类:

1.Message类:创建和解析邮件的核心API,通常使用它的子类MiMeMessage类。

2.Transport类:发送邮件的核心API

3.Store类:接收邮件的核心API

4.Session类:用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息

3.发送纯文本文件

package com.hzp.util;import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;/*** @ClassName SendMail* @Description* @Author xxx* @Date 2020/7/28 20:08* @Version 1.0*/
public class SendMail {//发件人地址public static String senderAddress="xxx@qq.com";//收件人地址public static String recipientAddress="xxx@qq.com";//可以给自己发,也就是发件人和收件人地址一样//发件人的密码public static String senderPassword="xxx";//我用的是qq邮箱的授权码,没有的参考下图获取public static void main(String[] args) throws Exception{//1.连接邮件服务器的参数配置Properties properties=new Properties();//设置用户的认证方式properties.setProperty("mail.smtp.auth", "true");//设置传输协议properties.setProperty("mail.transport.protocol", "smtp");//设置发件人的SMTP邮件服务器地址properties.setProperty("mail.smtp.host", "smtp.qq.com");//2.创建定义整个应用程序所需环境信息的Session对象Session session=Session.getInstance(properties);//设置调试信息在控制台打印session.setDebug(true);//3.创建邮件的实例对象Message message=getMimeMessage(session);//4.根据session对象获取邮件传输对象transportTransport transport=session.getTransport();//设置发件人的账户和密码transport.connect(senderAddress, senderPassword);//发送邮件transport.sendMessage(message, message.getAllRecipients());//5.关闭邮件连接transport.close();}/***@Author huang*@Description 获得一封邮件的实例对象*@Date 2020/7/28 20:21*@Param [session]*@Return javax.mail.Message*/public static Message getMimeMessage(Session session) throws Exception{//创建一封邮件的实例对象MimeMessage msg=new MimeMessage(session);//设置发件人的地址msg.setFrom(new InternetAddress(senderAddress));//设置收件人的地址msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipientAddress));//设置邮件的主题msg.setSubject("邮件主题", "UTF-8");//设置邮件的正文msg.setContent("这是一封纯文本文件", "text/html;charset=utf-8");//设置邮件的发送时间,默认立即发送msg.setSentDate(new Date());return msg;}
}

4.获取授权码步骤



5.接收邮件

package com.hzp.util;import javax.mail.*;
import java.util.Properties;/*** @ClassName ReceiveMail* @Description* @Author xxx* @Date 2020/7/28 20:44* @Version 1.0*/
public class ReceiveMail {//收件人的地址public static String recipientAddress="xxx@qq.com";//收件人的密码public static String recipientPassword="xxx";public static void main(String[] args) throws Exception {//1.连接邮件服务器的参数配置Properties props=new Properties();//设置传输协议props.setProperty("mail.store.protocol", "pop3");//设置收件人的pop3服务器props.setProperty("mail.pop3.host", "pop.qq.com");//切勿出现空格,不然没用//2.创建定义整个应用程序所需的环境信息的Session对象Session session=Session.getInstance(props);//设置调试信息在控制台打印session.setDebug(true);//3.通过session获取接收邮件的实例对象Store store=session.getStore("pop3");//连接收件人的pop3服务器store.connect("pop.qq.com",recipientAddress, recipientPassword);//获得用户的邮件账户,注意通过pop3协议获取某个邮件夹的名称只能为inboxFolder folder = store.getFolder("inbox");//设置对邮件的访问权限folder.open(Folder.READ_WRITE);//4.得到邮件账户的所有邮件信息Message[] msgs=folder.getMessages();//遍历获得每封邮件的信息for (int i=0;i<msgs.length;i++){//获取邮件主题String subject = msgs[i].getSubject();//获取发件人Address[] from = msgs[i].getFrom();//获取邮件内容(包含邮件内容的html代码)Object content = msgs[i].getContent();//打印邮件内容System.out.println(content);}//5.关闭邮件文件夹对象和连接对象folder.close(true);store.close();}
}

6.JavaMail发送带图片、附件的邮件

package com.hzp.util;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;/*** @ClassName SendMail* @Description* @Author xxx* @Date 2020/7/28 20:08* @Version 1.0*/
public class SendMail {//发件人地址public static String senderAddress="xxx@qq.com";//收件人地址public static String recipientAddress="xxx@qq.com";//发件人的密码public static String senderPassword="xxx";public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {//1.连接邮件服务器的参数配置Properties properties=new Properties();//设置用户的认证方式properties.setProperty("mail.smtp.auth", "true");//设置传输协议properties.setProperty("mail.transport.protocol", "smtp");//设置发件人的SMTP邮件服务器地址properties.setProperty("mail.smtp.host", "smtp.qq.com");//2.创建定义整个应用程序所需环境信息的Session对象Session session=Session.getInstance(properties);//设置调试信息在控制台打印session.setDebug(true);//3.创建邮件的实例对象Message message=getMimeMessage(session);//4.根据session对象获取邮件传输对象transportTransport transport=session.getTransport();//设置发件人的账户和密码transport.connect(senderAddress, senderPassword);//发送邮件transport.sendMessage(message, message.getAllRecipients());//5.关闭邮件连接transport.close();}/***@Author huang*@Description 获得一封邮件的实例对象*@Date 2020/7/28 20:21*@Param [session]*@Return javax.mail.Message*/public static Message getMimeMessage(Session session) throws MessagingException, UnsupportedEncodingException {//创建一封邮件的实例对象MimeMessage msg=new MimeMessage(session);//设置发件人的地址msg.setFrom(new InternetAddress(senderAddress));//设置收件人的地址msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipientAddress));//设置邮件的主题msg.setSubject("邮件主题", "UTF-8");//设置邮件的正文
//        msg.setContent("这是一封纯文本文件", "text/html;charset=utf-8");//创建图片节点MimeBodyPart image=new MimeBodyPart();//读取本地文件DataHandler dh=new DataHandler(new FileDataSource("D:\\img\\3.jpg"));//将图片数据添加到图片节点image.setDataHandler(dh);//为节点设置一个唯一编号(将在文本节点中引用)image.setContentID("mailphoto");//创建文本节点MimeBodyPart text=new MimeBodyPart();//将图片包含在邮件内容上text.setContent("<img src='cid:mailphoto'/>", "text/html;charset=utf-8");//将文本节点和图片节点合成一个混合节点MimeMultipart mm_img_text=new MimeMultipart();mm_img_text.addBodyPart(image);mm_img_text.addBodyPart(text);mm_img_text.setSubType("related");//关联关系//将文本和图片的混合节点封装成一个普通节点MimeBodyPart img_text=new MimeBodyPart();img_text.setContent(mm_img_text);//创建附件节点MimeBodyPart attach=new MimeBodyPart();//读取本地文件DataHandler dh2=new DataHandler(new FileDataSource("D:\\img\\11.docx"));//将数据添加到节点attach.setDataHandler(dh2);//设置附件的文件名attach.setFileName(MimeUtility.encodeText(dh2.getName()));//将(文本+图片)节点和附件节点合成一个大的混合节点MimeMultipart mm=new MimeMultipart();mm.addBodyPart(img_text);mm.addBodyPart(attach);mm.setSubType("mixed");//混合关系//将最终的混合节点mm作为邮件内容msg.setContent(mm);//设置邮件的发送时间,默认立即发送msg.setSentDate(new Date());return msg;}
}

7.小结

1.不管是收件、发件对象,还是邮件对象,都依赖于session对象,而session对象又依赖于Properties配置对象。

2.如果要在邮件中加入图片或附件,最终需要将所有节点合成一个混合节点,并将它作为邮件内容添加到message。

JavaMail之发送邮件+接收邮件相关推荐

  1. JavaMail发送和接收邮件

    一.JavaMail概述:        JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供 ...

  2. java邮件接收代码,JavaMail入门第四篇 接收邮件(示例代码)

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  3. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  4. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  5. 使用python发送邮件和接收邮件

    发邮件是大家工作中最常用到的.今天来看一下怎么用python来发送和接收邮件. python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib ...

  6. 解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法

    解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法 解决的办法:邮件\通讯录\日历 一: (1)用手机网页登录QQ邮箱网页版 (2)登录后,拉到下面,设置-账户,选择这个号码的作为默认发信帐号– ...

  7. 用python发邮件为什么接收不了_使用python发送邮件和接收邮件

    发邮件是大家工作中最常用到的.今天来看一下怎么用python来发送和接收邮件. python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib ...

  8. .NET发送邮件和接收邮件

    lumisoft 类库可以到 http://www.lumisoft.ee/lsWWW/download/downloads/Net下载 using System; using System.Data ...

  9. python操作邮箱发送邮件和接收邮件

    首先,用到的模块 import logging import traceback from email.mime.application import MIMEApplication import o ...

  10. JavaMail(四):接收邮件

    2019独角兽企业重金招聘Python工程师标准>>> 接收邮件采用POP3协议进行接收,简单的一个接收邮件案例如下 /*** 接收邮件*/ public static void r ...

最新文章

  1. 手写 Spring 事务、IOC、DI 和 MVC
  2. SAP RETAIL MM42维护商品采购信息记录数据的缺陷
  3. hadoop 安全模式
  4. invalidate
  5. java c语言union转换_C语言联合体(union)的使用方法及其本质-union
  6. Mysql中遇到的错误
  7. 子集和问题 算法_子集问题 主要是去重算法
  8. ldd /usr/bin/mysql_mysql客户端登录时报mysql: relocation error错误
  9. 解决 Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py 问题
  10. STL之template类模板
  11. Hibernate向MySQL插入中文数据--乱码解决
  12. IE游览器的扩展事件
  13. 游戏编程之六 游戏编程的特点
  14. 尚学堂高淇python笔记_【129天】尚学堂高琪Java300集视频精华笔记(62)
  15. 线性不可分转可分----低维空间转高维空间
  16. C语言使用结构体给另一个同类型结构体赋值
  17. Java输出4位数整数,输出这个数的千位,百位,十位,个位
  18. python01g内存读取10g文件并排序_将大文件逐行读取到Python2.7中时的内存使用
  19. 由抢课所引发的对未来的焦虑和暂时能想到的一些方法
  20. 电子式射频开关(电子RF开关,电子开关,RF Switch)

热门文章

  1. C语言程序设计答何钦铭答案,c语言程序设计何钦铭课后题答案
  2. 美团外卖广告投放系统的设计
  3. 雅虎相册批量下载 Beta2 版本 --纪念 5.12 汶川大地震
  4. 视频、音频格式转换全集
  5. python colour-science 绘制CIE 1976色度图
  6. FileZilla中文乱码解决方法
  7. plsql+FileZilla显示乱码问题
  8. 用Tornado实现web聊天室(前端采用vue+bootstrap)
  9. AdventureWorks数据库数据字典研究
  10. android获取系统剪贴板内容,android系统如何如何恢复剪贴板内容