前言

最近用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 smtp pop3_Java基于smtp与pop3实现收发邮件的功能相关推荐

  1. java发送邮件354_基于SMTP的JAVA邮件发送程序

    这个程序没有使用JavaMail API,而是根据SMTP协议的要求直接处理协议的细节发送邮件,虽然比较麻烦了一些,但是对了解邮件协议的细节很有帮助的. 本文分两部分,第一部分是SMTP命令介绍(这个 ...

  2. 基于SMTP协议的模拟邮件系统(计算机网络课程设计)

    目录 一.设计内容 二.所用到的知识 三.需求分析 四.运行效果 1.登录与注册 2.信息管理 3.邮件发送与收取 五.部分核心代码 1.SendServlet.java(实现邮件发送) 2.Rece ...

  3. 微软pop3服务器,真算孤陋寡闻。。微软旗下的邮箱都支持POP3收发邮件了

    偶然之间才知道微软旗下的hotmail.com live.com live.cn msn.com等等免费邮箱都已经向普通用户开放了pop3收发邮件的功能...看来我真的是老了... 一直不喜欢用微软的 ...

  4. 基于python的毕业论文邮箱收发系统_Python 收发Email的实现

    关于Email的基础知识就不说,直接进入Python主题. 一 发送Email 简单邮件传输协议(SMTP)大家应该都很熟悉了,在python中也有一个smtplib的模块来实现发送邮件的功能,一般的 ...

  5. 湖南大学基于SMTP和POP3的邮件系统课程设计

    这是我们2020年大三下学期计算机网络课程设计做的项目,后期准备开源到github上,这里是我们的课程设文档 1绪论 背景与目的 随着电子邮件作为人们沟通交流的主要工具,在网络中有着广泛的应用.邮件系 ...

  6. java smtp.126.com_Java Mail---SMTP、POP3协议-DOS下手动收发邮件演示过程

    转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自 E-Mail协议简介: 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器. 发送 ...

  7. 湖南大学基于SMTP和POP3的邮件系统——计算机网络课设

    基于SMTP和POP3的邮件系统,创新点较多,课设得分很高 这是2022年春季-软件工程19级计算机网络课程设计内容,下方的文档是本项目的需求文档. 本项目的所有代码(安卓端+Web端+服务端)已经完 ...

  8. 使用java语言基于SMTP协议手写邮件客户端

    使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...

  9. C# 网络编程之基于SMTP发送电子邮件

     本文主要讲述基于C#网络编程的发送邮件的编程,邮件发送功能是基于邮件协议的,常见的电子邮件协议有SMTP(简单邮件传输协议).POP3(邮局协议).IMAP(Internet邮件访问协议),文章主要 ...

  10. EMAIL发送系统(C#+基于SMTP认证) 2.0

    这个是对于 EMAIL发送系统(C#+基于SMTP认证) 1.0 的改版这个第一版是2002年11月写的,过了一年半了,才有人提意见,就修正了一下,因为后来做的项目一直用不上,也就没有注意到 前段时间 ...

最新文章

  1. poj3068(最小费用流)
  2. GAN完整理论推导与实现,Perfect!
  3. 最小二乘法多项式曲线拟合原理与实现--转
  4. SQL模糊查询 LIKE
  5. mysql用的cap中哪两个_分布式事务CAP定理和BASE理论
  6. 农村树上的野菜“刺老芽”,价格比肉还贵,这是为啥呢?
  7. vue中用table_element-ui中的 table 组件在vue中的使用
  8. 自动驾驶 8-3: 递归最小二乘法Recursive Least Squares
  9. c语言自动变量全局变量,C语言全局变量的一些简单介绍
  10. h5拍摄身份证_H5接口调用,身份证识别
  11. 中国天气的各个城市的id,整理成json文件记录
  12. C++PTA题解(1)——厘米换算英尺英寸
  13. 小记--解决方案: rsyslogd cpu占用率高
  14. 八千里路云和月,蚂蚁金服面出血,offer已拿,仰天长啸,壮怀激烈!
  15. 软文成功案例,给企业带来的价值不可限量
  16. 神策数据:2021 证券业数字新基建趋势洞察
  17. Win10下SCP命令免密码上传、下载工程师服务器上的文件
  18. autium pcb手动布线_画PCB时,一些非常好的布线技巧
  19. Flutter TabBar
  20. 机器学习自学成才的十条戒律

热门文章

  1. 妙招防止非法入侵Win2000/XP系统(转)
  2. Base64编码工具类
  3. secoclient在Mac下使用无法上网的解决办法
  4. 【J2EE】【1.HelloWorld】J2EE基础(jsp,servlet,tomcat,eclipse)
  5. erp的术语-jde系统
  6. linux 二进制编辑工具,全网最全Linux的十大十进制编辑器,要接触Linux的你摆脱不了...
  7. 台达b2伺服modbus通讯_台达伺服ASDA-B2使用手册-简体最新.pdf
  8. 在鱼池终于挖到0.01的Zcash(ZEC)了,目前正在打款
  9. 单片机(ISIS 7 Professional):实现简易十字路口红绿灯代码项目
  10. SQL SERVER 卸载清除步骤