Java基于smtp与pop3实现收发邮件的功能
2015-11-16 23:22
633 查看
前言
背景
javaMail
smtp
pop3
发送邮件
接收邮件
总结
JavaMail并不包含在JDK中,需要我们手动下载并导入。
JavaMail官方下载地址
想要深入了解JavaMail还是要阅读官方文档。
JavaMail官方文档
下载javax.mail.jar包,使用时导入即可。
我们将使用pop3协议来接收邮件。
下面是我实现的一个通过QQ邮箱的smtp服务器发送邮件的demo,通过这个demo,你将看到整个发送邮件的流程。
想要实现更加丰富的功能,就去读文档和协议的内容吧。
对本篇博客有疑问可联系leejf1994@outlook.com交流。
背景
javaMail
smtp
pop3
发送邮件
接收邮件
总结
前言
最近用java实现了收发邮件的功能,网上虽然已经有很多资料,但实际开发过程中还是遇到了一些问题。查阅了不少资料才最终完成,在此分享一下,希望帮助更多的人少走弯路。背景
javaMail
JavaMail是java提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序,完成收发邮件的功能。JavaMail并不包含在JDK中,需要我们手动下载并导入。
JavaMail官方下载地址
想要深入了解JavaMail还是要阅读官方文档。
JavaMail官方文档
下载javax.mail.jar包,使用时导入即可。
smtp
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。我们将利用smtp协议来发送邮件。pop3
POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。我们将使用pop3协议来接收邮件。
发送邮件
Talk is cheap.Show me the code!下面是我实现的一个通过QQ邮箱的smtp服务器发送邮件的demo,通过这个demo,你将看到整个发送邮件的流程。
public static void main(String[] args){ try { String host = "smtp.qq.com";//这是QQ邮箱的smtp服务器地址 String port = "25"; //端口号 /* *Properties是一个属性对象,用来创建Session对象 */ Properties props = new Properties(); props.setProperty("mail.smtp.host", host); props.setProperty("mail.smtp.port", port); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.ssl.enable", "false");//"true" props.setProperty("mail.smtp.connectiontimeout", "5000"); final String user = "******@qq.com";//用户名 final String pwd = "******";//密码 /* *Session类定义了一个基本的邮件对话。 */ Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //登录用户名密码 return new PasswordAuthentication(user,pwd); } }); session.setDebug(true); /* *Transport类用来发送邮件。 *传入参数smtp,transport将自动按照smtp协议发送邮件。 */ Transport transport = session.getTransport("smtp");//"smtps" transport.connect(host,user,pwd); /* *Message对象用来储存实际发送的电子邮件信息 */ MimeMessage message = new MimeMessage(session); message.setSubject("邮件标题"); //消息发送者接收者设置(发件地址,昵称),收件人看到的昵称是这里设定的 message.setFrom(new InternetAddress(user,"二师兄")); message.addRecipients(Message.RecipientType.TO,new InternetAddress[]{ //消息接收者(收件地址,昵称) //不过这个昵称貌似没有看到效果 new InternetAddress("510172916@qq.com","大师兄"), }); message.saveChanges(); //设置邮件内容及编码格式 //后一个参数可以不指定编码,如"text/plain",但是将不能显示中文字符 message.setContent("邮件内容..", "text/plain;charset=UTF-8"); //发送 //transport.send(message); Transport.send(message); transport.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
接收邮件
仍然用一个demo来总结接收邮件的过程。public static void main(String[] args){ String protocol = "pop3";//使用pop3协议 boolean isSSL = true;//使用SSL加密 String host = "pop.qq.com";//QQ邮箱的pop3服务器 int port = 995;//端口 String username = "******@qq.com";//用户名 String password = "******";//密码 /* *Properties是一个属性对象,用来创建Session对象 */ Properties props = new Properties(); props.put("mail.pop3.ssl.enable", isSSL); props.put("mail.pop3.host", host); props.put("mail.pop3.port", port); /* *Session类定义了一个基本的邮件对话。 */ Session session = Session.getDefaultInstance(props); /* * Store类实现特定邮件协议上的读、写、监视、查找等操作。 * 通过Store类可以访问Folder类。 * Folder类用于分级组织邮件,并提供照Message格式访问email的能力。 */ Store store = null; Folder folder = null; try { store = session.getStore(protocol); store.connect(username, password); folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY);//在这一步,收件箱所有邮件将被下载到本地 int size = folder.getMessageCount();//获取邮件数目 Message message = folder.getMessage(size);//取得最新的那个邮件 //解析邮件内容 String from = message.getFrom()[0].toString(); String subject = message.getSubject(); Date date = message.getSentDate(); System.out.println("From: " + from); System.out.println("Subject: " + subject); System.out.println("Date: " + date); } catch (Exception e) { e.printStackTrace(); } finally { try { if (folder != null) { folder.close(false); } if (store != null) { store.close(); } } catch (Exception e) { e.printStackTrace(); } } System.out.println("接收完毕!"); }
总结
上面两个demo可以完成最简单的收发邮件功能。想要实现更加丰富的功能,就去读文档和协议的内容吧。
对本篇博客有疑问可联系leejf1994@outlook.com交流。
相关文章推荐
- java 使用 Date 和 SimpleDateFormat 类表示时间
- 改变spring-servlet.xml名字和默认位置
- Java 枚举类型的基础和高级用法
- Java学习笔记
- Java: 正则表达式
- java Socket 传输对象的时候程序没反应了。
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- java实现冒泡算法
- Java基础学习总结——Java对象的序列化和反序列化
- Java用ArrayList实现栈
- Java日期与时间的处理/Date,String,Calendar转换
- Java锁的种类以及辨析(四):可重入锁
- 2._尚硅谷_佟刚_JavaWEB_Servlet-2
- Spring Learning
- Java笔记之String
- Java锁的种类以及辨析(三):阻塞锁
- Java锁的种类以及辨析(二):自旋锁的其他种类
- Java笔记之数组
- Java用ArrayList实现队列
- Java 计算日期加、减一天