`
hbhgjiangkun
  • 浏览: 95961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Socket收发邮件--SMTP和POP3

 
阅读更多

SMTP的连接和收发过程

a.建立TCP连接。
b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。
c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行
d.协商结束,发送邮件,用命令DATA发送
e.以.表示结束输入内容一起发送出去
f.结束此次发送,用QUIT命令退出。

SMTP的基本命令集

HELO   向服务器标识用户身份
MAIL   初始化邮件传输mail from: <xxx>
RCPT   标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to: <xxx>
DATA   在单个或多个RCPT命令后,表示所有的邮件接收人已标识,初始化数据传输,以.结束。
NOOP   无操作,服务器应响应OK
RSET   重置会话,当前传输被取消
QUIT   结束会话


POP3简介

在POP3协议中有三种状态,认可状态,处理状态,和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。

POP3基本命令集
USER username
PASS password   
STAT  请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
LIST  返回邮件数量和每个邮件的大小
RETR [Msg#] 返回由参数标识的邮件的全部文本
DELE [Msg#] 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
NOOP 服务器返回一个肯定的响应
QUIT 更新


class POP3Demo {
private static String POP3Server = "pop.126.com";
private static String USERNAME = "username";//实际应用中改成真实的用户名
private static String PASSWORD = "password";//实际应用中改成真实的密码
public static void main(String[] args) {
int POP3Port = 110;
Socket client = null;
try {
// 向POP3服务程序建立一个套接字连接。
client = new Socket(POP3Demo.POP3Server, POP3Port);
// 创建一个BufferedReader对象,以便从套接字读取输出。
InputStream is = client.getInputStream();
BufferedReader sockin = new BufferedReader(new InputStreamReader(is));
// 创建一个PrintWriter对象,以便向套接字写入内容。
OutputStream os = client.getOutputStream();
PrintWriter sockout = new PrintWriter(os, true);
// 显示同SMTP服务程序的握手过程。
System.out.println("S:" + sockin.readLine());
sockout.println("user " + POP3Demo.USERNAME);
System.out.println("S:" + sockin.readLine());
sockout.println("pass " + POP3Demo.PASSWORD);
System.out.println("S:" + sockin.readLine());
sockout.println("stat");
String temp[] = sockin.readLine().split(" ");
int count = Integer.parseInt(temp[1]);//得到信箱中共有多少封邮件
for (int i = 1; i < count + 1; i++) {//依次打印出邮件的内容
sockout.println("retr " + i);
System.out.println("以下为第" + i + "封邮件的内容");
while (true) {
String reply = sockin.readLine();
System.out.println(reply);
if (reply.toLowerCase().equals(".")) {
break;
}
}
} </xxx></xxx>

} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
if (client != null) {
client.close();
}
} catch (IOException e) {}
}
}
}

class SMTPDemo {
//以下三项请在使用时改成真实的信箱地址
//并且注意,SMTPServer和receiver必须是同一个服务器
private static String sender = "sender";
private static String receiver = "receiver";
private static String SMTPServer = "smtpserver";
public static void main(String[] args) {
int SMTPPort = 25;
Socket client = null;
try {
// 向SMTP服务程序建立一个套接字连接。
client = new Socket(SMTPDemo.SMTPServer, SMTPPort);
// 创建一个BufferedReader对象,以便从套接字读取输出。
InputStream is = client.getInputStream();
BufferedReader sockin = new BufferedReader(new InputStreamReader(is));
// 创建一个PrintWriter对象,以便向套接字写入内容。
OutputStream os = client.getOutputStream();
PrintWriter sockout = new PrintWriter(os, true);
// 显示同SMTP服务程序的握手过程。
System.out.println("S:" + sockin.readLine());
sockout.println("helo");
System.out.println("S:" + sockin.readLine());
sockout.println("mail from: " + "<" + SMTPDemo.sender + ">");
System.out.println("S:" + sockin.readLine());
sockout.println("rcpt to: " + "<" + SMTPDemo.receiver + ">");
System.out.println("S:" + sockin.readLine());
sockout.println("data");
//发送邮件标题
sockout.println("subject: 你好");
//发送邮件内容
sockout.println("ni hao");
sockout.println("wo shi li jian");
//此处的.为特殊标记,表示邮件结束
sockout.println(".");
sockout.println("rset");
sockout.println("quit");
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
if (client != null) {
client.close();
}
} catch (IOException e) {}
}
}
}

分享到:
评论

相关推荐

    计算机网络邮件收发 SMTP和POP3实现

    该课程设计主要任务是实现收发无附件的邮件。在上机前应认真做好各种准备工作,熟悉每个题目涉及的网络相关知识,熟悉机器的操作系统、语言的集成环境和设计工具。在实验过程中,通过一个实际网络协议或网络应用系统...

    邮件服务器支持SMTP,POP3协议

    综合使用了Socket和JavaMail实现了邮件的收发并支持SMTP,POp3协议,带有web界面,实现了邮件的收发删除查看上传下载附件。并带有搜索邮件等功能

    一个用POP3扩展协议实现的收发SSL验证类邮箱的小程序

    在制作收发邮件的.NET程序时,一般使用JAMIL等第三方组件,但对于需要SSL安全验证的邮箱就有些麻烦了,其实有两种办法,SOCKET和POP3扩展协议,这里上传了一个Pop3mimeclient类实现的收发SSL类邮箱的小程序,该类是...

    Foxmail Server For Windows v2.0 公测版.rar

    Foxmail Server 提供多种邮件服务,包括SMTP、POP3、LDAP,内建邮件扩充协议的MIME,用户可以根据使用习惯以Outlook Express、Foxmail等流行客户端软件收发邮件,也可以在美观亲切易用的全中文WEB浏览器界面上登陆...

    kmail油箱服务(支持自动收发邮件,支持任何类型的附件发送,接收.)

    基于socket i/o 选择模式用pop3管理油箱,smtp发邮件,支持附件,提供原代码同大家分享,实现语言C语言,开发环境:vc6.0,所以想看懂代码要有点水平,呵呵,  

    Foxmail Server For Windows v2.0 公测版

    Foxmail Server 提供多种邮件服务,包括SMTP、POP3、LDAP,内建邮件扩充协议的MIME,用户可以根据使用习惯以Outlook Express、Foxmail等流行客户端软件收发邮件,也可以在美观亲切易用的全中文WEB浏览器界面上登陆...

    java jdk实列宝典 光盘源代码

    使用smtp协议发送简单邮件; 发送带附件的邮件; 给多人发送邮件; 使用pop3接收邮件; 19jsp与servlet 获取客户端的真实ip地址; jsp无刷新聊天室; 设置和读取cookie; 上传文件; 用servlet生成图形验证码; 用servlet...

    C# winform典型系统开发模板

    第8章 电子邮件收发模块   8.1 概述 180  8.2 关键技术 180  8.2.1 Base64编码格式 180  8.2.2 SMTP服务 181  8.2.3 POP3协议 184  8.2.4 使用Jmail组件接收邮件 186  8.2.5 邮件发送类...

    C#开发典型模块大全(光盘)

    第8章 电子邮件收发模块 8.1 概述 8.2 关键技术 8.2.1 Base64编码格式 8.2.2 SMTP服务 8.2.3 POP3协议 8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类的使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 ...

    C#开发典型模块大全(光盘)第一部分

    第8章 电子邮件收发模块 8.1 概述 8.2 关键技术 8.2.1 Base64编码格式 8.2.2 SMTP服务 8.2.3 POP3协议 8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类的使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 ...

    C#开发典型模块大全(光盘)第二部分

    第8章 电子邮件收发模块 8.1 概述 8.2 关键技术 8.2.1 Base64编码格式 8.2.2 SMTP服务 8.2.3 POP3协议 8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类的使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 ...

    C#开发典型模块大全

    第8章 电子邮件收发模块 8.1 概述 180 8.2 关键技术 180 8.2.1 Base64编码格式 180 8.2.2 SMTP服务 181 8.2.3 POP3协议 184 8.2.4 使用Jmail组件接收邮件 186 8.2.5 邮件发送类的使用 188 8.2.6 ...

Global site tag (gtag.js) - Google Analytics