第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > JavaMail之发送邮件+接收邮件

JavaMail之发送邮件+接收邮件

时间:2019-09-21 04:22:29

相关推荐

JavaMail之发送邮件+接收邮件

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 /7/28 20:08* @Version 1.0*/public class SendMail {//发件人地址public static String senderAddress="xxx@";//收件人地址public static String recipientAddress="xxx@";//可以给自己发,也就是发件人和收件人地址一样//发件人的密码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", "");//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 /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 /7/28 20:44* @Version 1.0*/public class ReceiveMail {//收件人的地址public static String recipientAddress="xxx@";//收件人的密码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", "");//切勿出现空格,不然没用//2.创建定义整个应用程序所需的环境信息的Session对象Session session=Session.getInstance(props);//设置调试信息在控制台打印session.setDebug(true);//3.通过session获取接收邮件的实例对象Store store=session.getStore("pop3");//连接收件人的pop3服务器store.connect("",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 /7/28 20:08* @Version 1.0*/public class SendMail {//发件人地址public static String senderAddress="xxx@";//收件人地址public static String recipientAddress="xxx@";//发件人的密码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", "");//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 /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。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。